pygame.sprite.Group的update方法

前言

在编写外星人入侵的项目的时候,主函数使用下面的代码创建精灵族并添加子弹类

self.bullets = pygame.sprite.Group()
new_bullet = Bullet(self)
self.bullets.add(new_bullet)

之后使用下面一行代码更新所有子弹的位置,但是奇怪的是程序运行的时候没有更新子弹位置

self.bullets.update()

原因

找了一会原因,想到这个update方法从始至终我都没有写过,它是怎么控制子弹位置的,找到创建Bullet类的文件看一下,书上更新子弹位置使用update函数,但是这里我改成了update_bullet_position,再看一下初始化如下

class Bullet(Sprite):
    """管理飞船发射子弹的类"""

    def __init__(self, game):
        super().__init__()

引用Sprite父类,Sprite中有update方法,这里在写update同名就是重新父类中的update方法,破案了。 

不使用self.bullets.update()

在创建Bullet类的时候,更新位置的函数名不写update时候,只需要这样修改就可以

    def _fire_bullet(self):
        """创建子弹"""
        new_bullet = Bullet(self)
        self.bullets.add(new_bullet)

    def _update_bullets(self):
        """更新子弹"""
        # self.bullets.update()  # 所有子弹成员调用update方法更新位置
        # 删除消失的子弹
        for bullet in self.bullets.sprites():
            bullet.update_bullet_position()  # 更新位置
            if bullet.rect.bottom < 0:
                self.bullets.remove(bullet)
            else:
                bullet.draw_bullet()

就是每次循环都调用更新位置的函数,这样感觉代码明了一点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值