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

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

我们人的肉眼所观察到的世界是属于 3D 世界,有远近大小之分。一个物件 A 被另一个物件 B 遮挡,物件 A 就会看不到,而在 2D 的世界里,都是平面的,没有实际的高度区分,就算做成了斜 45 度角,也是一种视觉呈现,并没有在计算机内形成高度差。
在一般的游戏引擎,或者像 Pygame 这样的游戏库中,基本都是“先绘制的图案先出来”,“后绘制的图案后出来”,而后绘制的图案一定遮挡前面绘制的图案。因为 2D 就是一个平面,从逻辑上讲,按照先后顺序绘制,没有任何问题。
但是如果我们现在做的游戏是斜 45 度角的游戏,类似《梦幻西游》视角的,那么人物和建筑物之间就存在遮挡的问题,如果处理不谨慎,就会出现人物浮在建筑物上,或者建筑物把人挡住了。
所以在一些 2D 引擎中,会有一个 Z 值的概念,Z 值的概念就是在(X,Y)的基本 2D 位置上,加一个高度的概念。这个高度是一个伪概念,它模仿 3D 的 Z 值,只是作遮挡用。但是我们现在使用 Pygame 来编写游戏的话,并没有 Z 值的概念,所以我们需要想一些办法来解决遮挡的问题。
首先,我们从共享资源中抽取一段围墙的图片来进行摆放。
围墙分为两幅图片,都是往右上角延伸的。现在我们需要将这两段围墙连接起来。如果我们像以前的做法,一个图片一个 blit 的话,那是不行的。因为这样需要相当大的代码量,所以我们采取将围墙的代码放入一个 list 中的做法。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《从 0 开始学游戏开发》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(5)

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

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

    4
    20
  • 李缺火
    请问图片资源,在哪里可以下载吗?

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

  • 宋桓公
    求图片链接,git
    1
  • 三硝基甲苯
    就后面加入的在上面。前面加入的在下面。后面加入的盖着前面加入的
  • 💦 Peter Pan
    其中一个被另一个遮住吧
收起评论
显示
设置
留言
5
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部