从 0 开始学游戏开发
蔡能
原网易游戏引擎架构师,资深游戏底层技术专家
37243 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 42 讲
从 0 开始学游戏开发
15
15
1.0x
00:00/00:00
登录|注册

第11讲 | 如何设置图像的前后遮挡?

改变绘制图片的代码
定义blit_sequences函数
在围墙后贴上人物
定义人物图片和载入图片
循环贴图
定义拼接围墙所需的变量
将围墙放入列表
定义图片和载入图片
留下的问题
利用Python包裹字典来处理Z值
遮挡时的绘制顺序
模拟Z值的作用
人物的摆放
围墙图片的摆放
Z值的概念
游戏引擎中的图像遮挡处理
3D世界与2D世界的区别
小结
如何设置图像的前后遮挡

该思维导图由 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
立即购买
登录 后留言

全部留言(6)

  • 最新
  • 精选
  • gerald
    没有人需要文章里的图片和代码吗?尤其是图片,跟着练习一遍,有一样的资源更有助于理解。如果你也需要,留言说出来,让老师知道大家确实有这种需求,应该把资源放出来供大家学习。

    作者回复: 我会找个时间开一个git供人下载

    2018-06-28
    5
    20
  • 李缺火
    请问图片资源,在哪里可以下载吗?

    作者回复: 没有,是我本地的资源

    2018-06-22
  • 宋桓公
    求图片链接,git
    2018-06-28
    1
  • ifelse
    z值相同,可以按在列表里的顺序绘制,否则可能随机遮挡
    2024-03-19归属地:浙江
  • 三硝基甲苯
    就后面加入的在上面。前面加入的在下面。后面加入的盖着前面加入的
    2018-06-21
  • 💦 Peter Pan
    其中一个被另一个遮住吧
    2018-06-21
收起评论
显示
设置
留言
6
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部