为了账号安全,请及时绑定邮箱和手机立即绑定

以正确的顺序错误地移除精灵组敌人

以正确的顺序错误地移除精灵组敌人

墨色风雨 2022-12-20 09:40:42
我有 2 个精灵组,一组用于敌人,一组用于玩家武器。我如何设置敌人 sprite 组的示例......(武器 sprite 组以相同的方式完成)class Bat(pygame.sprite.Sprite):    def __init__(self, bat_x, bat_y, bat_image, bat_health, bat_immune, const, dash_counter, dash, dash_time, fly_count, fly_time):        pygame.sprite.Sprite.__init__(self)        self.bat_health = bat_health        self.bat_immune = bat_immune        self.const = const        self.dash_counter = dash_counter        self.dash = dash        self.dash_time = dash_time        self.fly_count = fly_count        self.fly_time = fly_time        self.image = bat_image        self.rect = self.image.get_rect()        self.mask = pygame.mask.from_surface(self.image)        self.rect.topleft = (bat_x, bat_y)        self.bat_x = bat_x        self.bat_y = bat_y    def update(self):        if pygame.sprite.groupcollide(all_bats, all_sword, False, True):            self.bat_health -= 1         if self.bat_health == 0:            self.kill()        ... #Irrelevantall_bats = pygame.sprite.Group()def bat_create():    bat_x = r_x*40    bat_y = r_y*40    bat_health = 5    bat_immune = False    const = 3    dash_counter = 0    dash = False    dash_time = 0    fly_count = 0    fly_time = 0    new_bat = Bat(bat_x, bat_y, bat_image, bat_health, bat_immune, const, dash_counter, dash, dash_time, fly_count, fly_time)    all_bats.add(new_bat)当玩家的武器击中蝙蝠时,无论击中的是哪只蝙蝠,在击中 5 次后第一只生成的蝙蝠将被杀死。我不知道为什么会这样。
查看完整描述

1 回答

?
繁花如伊

TA贡献2012条经验 获得超12个赞

看起来这是问题所在:


def update(self):

    if pygame.sprite.groupcollide(all_bats, all_sword, False, True):

        self.bat_health -= 1 

groupcollide返回碰撞列表。上面的代码正在检查all_bats,all_swords所以一切都 Vs 一切。并且if ( non-empty-list )总是返回True。


所以如果发生任何蝙蝠+剑的碰撞,这个精灵的生命值就会减少。每次任何蝙蝠碰撞时,这可能都会减少每只蝙蝠的数量。因此,创建的第一个项目将首先达到零。self.bat_health


您需要检查“这个精灵”是否是碰撞的一部分。这是一个相当简单的改变:


def update(self):

    hit_list = pygame.sprite.groupcollide(all_bats, all_sword, False, True):

    if ( self in hit_list ):

        self.bat_health -= 1 

但是groupcollide在每只蝙蝠的update(). 也许将groupcollide调用移动到.update()函数之外的某个地方,并且只执行一次这些计算。将碰撞结果传递给 sprite-update 函数等。


查看完整回答
反对 回复 2022-12-20
  • 1 回答
  • 0 关注
  • 87 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号