首页 » 技术分享 » Python编写微信打飞机小游戏(五)

Python编写微信打飞机小游戏(五)

 

如果觉得这篇文章对您有所启发,欢迎关注我的公众号,我会尽可能积极和大家交流,谢谢。 


  Python编写微信打飞机小游戏(一)

  Python编写微信打飞机小游戏(二)

  Python编写微信打飞机小游戏(三)

  Python编写微信打飞机小游戏(四)

  Python编写微信打飞机小游戏(五)

  Python编写微信打飞机小游戏(六)

  Python编写微信打飞机小游戏(七)

  Python编写微信打飞机小游戏(八)

  Python编写微信打飞机小游戏(九)

  Python编写微信打飞机小游戏(十)

  Python编写微信打飞机小游戏(十一)

  Python编写微信打飞机小游戏(十二)

  在完成敌方敌机的初步设置后,运行程序我们发现在屏幕上我方飞机和敌方飞机能够友好共存,互不干涉,这显然不符合游戏的宗旨,在这篇文章中我们为游戏添加我方飞机和敌机之间的碰撞损毁机制。

  1、碰撞检测

  碰撞检测是游戏设计中的最基本的部分,几乎任何游戏中的主角都具有发射一些飞行道具的能力,如何准备判断主角射出的子弹、飞镖、能量球、龟派气功是否准确命中目标,就是碰撞检测所要实现的功能。对于一些规则的图形(例如说圆形),我们可以计算两个圆形圆心之间的距离与其半径的关系来判断其是否已经相撞,但对于一些不规则图形(如我们这里的小飞机),这种简单的方法是行不通的。为此,Pygame模块已经在精灵(Sprite)类中添加了碰撞检测函数:spritecollide()。

  Pygame碰撞检测有两种机制,一种是直接调用spritecollide()函数,函数需要传入一个精灵对象和一个精灵组对象,用以检测一个精灵与另一个精灵组中的所有精灵是否发生碰撞。这种基本的碰撞检测机制实际上是存在一定缺陷的。由于它是通过检测两个精灵所拥有的对象图片(精灵的image)是否发生重叠来检测碰撞的发生,当精灵图片除了精灵本身若还存在较大空白区域的话(例如我们的飞机和敌机图片),可能程序在检测到碰撞时只是两个精灵图片的空白部分发生了重叠,而两个精灵对象还并没有重叠到一起,这就给游戏带来了不好的体验,因此在本程序中我们使用另外一种更为精确的碰撞检测方法:基于精灵图像掩膜的碰撞检测方法。

  这种方法同样是调用spritecollide()函数,只是在调用时指定函数的调用方式为掩膜检测类型,这样在碰撞检测时程序检测的就是精灵的非透明部分(掩膜)是否发生碰撞,而非整个图像是否发生重叠。至于如何将精灵图片中的背景区域变得透明,大家可以从网上查阅相关方法,不过这里我们给出的图片资源都已经经过了透明化处理,可以拿来直接使用的。

  2、为我方飞机和敌方飞机指定掩膜属性以及生存状态标志位

  由于需要基于掩膜进行碰撞检测,因此需要在飞机类(包括我方飞机和敌机)中添加一个掩膜(mask)属性:

self.mask = pygame.mask.from_surface(self.image1)  # 获取飞机图像的掩膜用以更加精确的碰撞检测

转载自原文链接, 如需删除请联系管理员。

原文链接:Python编写微信打飞机小游戏(五),转载请注明来源!

0