Pygame:飞机大战3 – 零基础入门学习Python092

Pygame:飞机大战3

 

让编程改变世界

Change the world by program


 

…… 此处省略N多内容,具体请看视频讲解 ……

 

由于我们只是使用普通的 spritecollide() 函数进行碰撞检测,所以默认是以图片的矩形区域作为检测范围,因此我们看到的是两飞机并没有真正相撞就都毁了……

1

 

其实我们完全可以做得更好,做到完美碰撞检测。sprite 模块中有个 collide_mask() 函数我们可以利用,该函数要求检测的对象拥有一个叫做 mask 的属性,用于指定检测的范围。关于 mask,Pygame 还专门整了个 mask 模块,其中的 from_surface() 函数可以将一个 Surface 对象中的非透明部分标志位 mask 并返回。

 

所以我们依葫芦画瓢,在敌机和我方飞机的类定义中加入:

self.mask = pygame.mask.from_surface(self.image)

 

然后将检测碰撞的函数改为:

enemies_down = pygame.sprite.spritecollide(me, enemies, False, pygame.sprite.collide_mask)

 

于是,我们实现了完美碰撞检测:

2

 

…… 此处省略N多内容,具体请看视频讲解 ……

 


为您推荐

报歉!评论已关闭.