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

第13讲 | 如何设置淡入淡出和碰撞检测?

返回碰撞结果
判断图片x轴和y轴是否重叠
图片位置的x轴和y轴
图片对象
逐渐改变背景色实现淡入淡出效果
使用fill函数填充背景色
图像的alpha混合处理
图像的alpha值修改
碰撞的检测
使用range函数获取图片所在屏幕点
计算图片长宽
参数
背景填充
Alpha混合
碰撞函数
淡入淡出效果
碰撞检测
淡入淡出
如何设置淡入淡出和碰撞检测

该思维导图由 AI 生成,仅供参考

我们在前一节,学习了精灵的变形、放大和缩小,并且学习了如何使用精灵类和组的概念来管理精灵,制成动画。今天,我将带你学习淡入淡出和碰撞热点的判断。
所谓的淡入淡出,就是英文的 fade-infade-out。淡入淡出在电影、游戏、CG、操作系统、手机 UI、应用等等各种地方随处可见。那究竟什么是淡入淡出呢?它在游戏中究竟如何实现呢?在我们的打飞机游戏中,什么时候会用到这个操作呢?

什么是淡入淡出?

不知道你有没有注意,在我们玩过的打飞机游戏中,当每一关游戏开始的时候,都会有个游戏画面逐渐出现的过程。短短几秒,从无到有,整个画面就呈现在你眼前了。同样,每一关结束的时候,也会有个画面逐渐消失的过程。
画面效果讲,这个画面从有到逐渐屏幕变暗,直到消失,或者反过来,由暗逐渐变亮,到完全进入画面的过程,就叫做淡入淡出。从声音角度讲,也存在淡入淡出,比如音乐从无声到逐渐有声,或者从有声到逐渐无声。
在 Pygame 中并不存在“画面的淡入淡出”这样的函数,需要我们自己去实现这样的功能。
首先,如果我们想给这张图片进行淡入淡出的处理的话,就需要对它进行 alpha 混合处理。我们在前面谈到过 alpha 混合,你可以理解成半透明,但是 alpha 混合究竟是什么呢?
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文详细介绍了在Pygame中实现淡入淡出效果和碰撞检测的方法。作者首先解释了淡入淡出效果的实现原理,通过alpha混合处理和背景填充来实现渐变效果。在碰撞检测方面,文章介绍了判断两个图片是否相交的方法,并给出了详细的代码示例和解释。作者强调了不要在加载图片时处理alpha值,而是通过fill函数来填充背景色实现淡入淡出效果。此外,还提到了Pygame中精灵类的碰撞检测方法,但指出其局限性。总的来说,本文以简洁清晰的语言介绍了技术实现方法,适合初学者快速了解和上手实践。读者可以通过本文快速掌握在Pygame中实现淡入淡出效果和碰撞检测的方法,为游戏开发提供了有益的参考。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《从 0 开始学游戏开发》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(9)

  • 最新
  • 精选
  • 三硝基甲苯
    想了一下。应该可以利用颜色的alpha的值,就在文中的代码里多判断一次alpha值,如果有相交的时候,就检测两个两个碰撞点的alpha值,因为透明图片alpha不是0就是255(应该吧,我觉得应该是这样)所以 当两个点都不是透明的时候就是碰撞到了。反之就是没有碰撞

    作者回复: 对了一半,有一种直接的做法是通过蒙皮完成的,也就是美术多做一份外框的图,如果接触面不是外框,那就是内部某个区域了,这么判断,缺点是增加资源和内存消耗。

    2018-07-08
    4
  • 赵鹏
    pygame没有提供基本的碰撞检测,这点其实很遗憾……

    作者回复: 可以自己模拟

    2019-01-29
  • 阿森
    为什么把飞机的初始y坐标改大一点,碰撞检测就不起作用了呢,全输出False

    作者回复: 怎么改大的?

    2018-07-22
  • louis
    碰撞本质上是两个图像的像素点形成的两个集合set1,set2。我们如果有能力得到每个物体包含的所有像素点,然后判断两个集合是否有交集即可。
    2020-10-22
    1
  • ifelse
    学习打卡
    2024-03-21归属地:浙江
  • slark
    如果可以获得两个物体然后进行与操作看是否为空。不过这个又涉及到要自己处理物体的轮廓
    2018-07-30
  • 阿森
    文中的输入坐标(100,300+y1),全改成(100,600+y1)就检测不到了
    2018-07-23
  • 以往
    先获取两张图的轮廓,再逐点判断两组轮廓有没有重叠
    2018-07-03
  • 大叔难当
    把图片拆分,比如机翼和机身作为两个不同对象载入屏幕,各自有自己的碰撞检测函数,至于能不能实现把机翼和机身放在同一个组中,还在思考
    2018-07-02
收起评论
显示
设置
留言
9
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部