我目前正在使用pygame在Python中制作Space Invaders游戏。
我目前有3个基础障碍,都是用1 x 1像素块('扩展'pygame.sprite.Sprite class
)构建的。对于碰撞检测,我检查导弹是否与障碍物发生碰撞。
现在,一切正常,当我发射并击中其中一个障碍时,被击中的像素被消除。
现在困扰我的是在最初的太空入侵者中,当船的导弹(或外星人的导弹) 击中屏障,它会引起影响屏障多个像素的“爆炸”。我想实现这一点 在我的python / pygame代码中。我该怎么做呢?
这是我的导弹类中的碰撞检测代码('扩展'pygame.sprite.Sprite):
baseBarrier_hit_list = pygame.sprite.spritecollide(self, all_baseBarrier_group, True)
for pixel in baseBarrier_hit_list:
self.kill() # I kill the missile after collision so that the other barrier pixels are unaffected.
break #so that the other pixels in the column are unaffected.
我想到'人工'将'随机'像素添加到baseBarrier_hit_list但我无法将元素添加到baseBarrier_hit_list。
这是原始太空入侵者的视频链接,看看我的意思: https://www.youtube.com/watch?v=axlx3o0codc
这里还有一个指向太空入侵者的python / pygame版本的链接,它表明在导弹和基础障碍之间发生碰撞时只有一个像素受到影响。 (注意,这不是我的游戏版本)。 https://www.youtube.com/watch?v=_2yUP3WMDRc
编辑:TemporalWolf的建议奏效了。这是我添加到我的函数中的代码。shield_hit_list_random = pygame.sprite.spritecollide(self, all_blockShields_group, False, pygame.sprite.collide_rect_ratio(2))
向函数传递一个False可以防止精灵被杀死。然后,我随机杀死shield_hit_list_random
组中的一些精灵,如下所示:
for shield in shield_hit_list_random:
pourcentage =randint(0,3)
if pourcentage == 2:
shield.kill()
答案 0 :(得分:1)
我会尝试使用is the same as C long或等效的圆圈:
pygame.sprite.collide_rect_ratio()两者之间的碰撞检测 精灵,使用缩放比例的rects。
collide_rect_ratio(ratio) -> collided_callable
一个可调用的类,用于检查之间的冲突 两个精灵,使用精灵版本的精灵。
使用比率创建,然后将实例作为传递 *碰撞函数的碰撞回调函数。
比率是浮点数 - 1.0是相同的大小,2.0是 两倍大,0.5大小一半。
pygame 1.8.1中的新功能
将作为spritecollide
函数的第4个参数