第11讲 | 如何设置图像的前后遮挡?
蔡能
该思维导图由 AI 生成,仅供参考
我们人的肉眼所观察到的世界是属于 3D 世界,有远近大小之分。一个物件 A 被另一个物件 B 遮挡,物件 A 就会看不到,而在 2D 的世界里,都是平面的,没有实际的高度区分,就算做成了斜 45 度角,也是一种视觉呈现,并没有在计算机内形成高度差。
在一般的游戏引擎,或者像 Pygame 这样的游戏库中,基本都是“先绘制的图案先出来”,“后绘制的图案后出来”,而后绘制的图案一定遮挡前面绘制的图案。因为 2D 就是一个平面,从逻辑上讲,按照先后顺序绘制,没有任何问题。
但是如果我们现在做的游戏是斜 45 度角的游戏,类似《梦幻西游》视角的,那么人物和建筑物之间就存在遮挡的问题,如果处理不谨慎,就会出现人物浮在建筑物上,或者建筑物把人挡住了。
所以在一些 2D 引擎中,会有一个 Z 值的概念,Z 值的概念就是在(X,Y)的基本 2D 位置上,加一个高度的概念。这个高度是一个伪概念,它模仿 3D 的 Z 值,只是作遮挡用。但是我们现在使用 Pygame 来编写游戏的话,并没有 Z 值的概念,所以我们需要想一些办法来解决遮挡的问题。
首先,我们从共享资源中抽取一段围墙的图片来进行摆放。
围墙分为两幅图片,都是往右上角延伸的。现在我们需要将这两段围墙连接起来。如果我们像以前的做法,一个图片一个 blit 的话,那是不行的。因为这样需要相当大的代码量,所以我们采取将围墙的代码放入一个 list 中的做法。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
在2D游戏开发中,实现图像的前后遮挡效果是一项关键的技术挑战。本文介绍了在Pygame中通过列表和循环来拼接围墙的图像,并模拟Z值的方式实现了图像的前后遮挡效果。作者还提到了在正式游戏开发中,通常会使用多线程来处理人物控制、NPC控制等,并通过地图数据文件来指示哪些坐标有物件遮挡,不能走。此外,文章总结了贴图的重点,包括将内容放入列表或数组中以减少编程工作量,以及计算好贴图的点,使得在连续贴图的过程中只需控制位置变量即可完成。 在实现图像的前后遮挡效果时,需要考虑绘制顺序,先绘制的会被后绘制的遮挡。利用Python,可以在外面包裹一层字典,每个物件载入时告知其Z值,然后在绘制时根据Z值安排绘制顺序。此外,本文提出了一个有趣的问题:如果在绘制的过程中,两个人物的Z值相同,人物碰到一起会出现什么结果呢?这个问题激发了读者的思考,为他们提供了一个思维挑战。 通过具体的代码示例和技术原理,本文帮助读者了解了在2D游戏中实现图像的前后遮挡效果的方法和技巧。这些技术对于游戏开发者来说是非常有价值的,能够帮助他们更好地实现游戏画面的真实感和交互性。文章内容丰富,涵盖了游戏开发中的关键技术点,对于对游戏开发感兴趣的读者来说,是一篇值得深入阅读和学习的文章。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《从 0 开始学游戏开发》,新⼈⾸单¥59
《从 0 开始学游戏开发》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(6)
- 最新
- 精选
- gerald没有人需要文章里的图片和代码吗?尤其是图片,跟着练习一遍,有一样的资源更有助于理解。如果你也需要,留言说出来,让老师知道大家确实有这种需求,应该把资源放出来供大家学习。
作者回复: 我会找个时间开一个git供人下载
2018-06-28520 - 李缺火请问图片资源,在哪里可以下载吗?
作者回复: 没有,是我本地的资源
2018-06-22 - 宋桓公求图片链接,git2018-06-281
- ifelsez值相同,可以按在列表里的顺序绘制,否则可能随机遮挡2024-03-19归属地:浙江
- 三硝基甲苯就后面加入的在上面。前面加入的在下面。后面加入的盖着前面加入的2018-06-21
- 💦 Peter Pan其中一个被另一个遮住吧2018-06-21
收起评论