python编程从入门到实践之外星人入侵

关于子弹的发射问题,我出现了以下问题,以下记录如何解决的:
第1个问题:在“setting.py”中设置的子弹速度不对,原来是这样的:

        self.bullet_speed_factor = 1
        self.bullet_speed_width = 3
        self.bullet_speed_height = 15
        self.bullet_color = 0, 0, 0

现在是这样的:

        self.bullet_speed_factor = 1
        self.bullet_width = 3
        self.bullet_height = 15
        self.bullet_color = 0, 0, 0

也就是说,第二行和第三行多了一个speed,导致报错。这个问题应该是很早就能发现的,但是查了很久才发现。需要细心处理。

第2个问题,完全按照书上的代码敲,发现没有子弹。一点一点的处理。
处理经过:

第一步:首先看一下程序是否检测到了按下空格这个操作。
具体就是print大法,在game_function.py中更改代码如下:

    elif event.key == pygame.K_SPACE:
        print("按下了空格键")
        new_bullet = Bullet(ai_settings, screen, ship)
        bullets.add(new_bullet)

通过运行发现,能够检测出“按下空格键”这个操作

第二步,检验子弹的位置。在bullet.py中的update函数,更改如下:

    def update(self):
        print("子弹向上飞行的速度"+str(self.speed_factor))
        self.y -= self.speed_factor
        self.rect.y = self.y

其中self.y代表子弹的纵向坐标,通过运行发现,这个“子弹向上飞行速度”这句话根本打印不出来,才发现,子弹位置没有更新。

解决方案:
在game_function.py里面的update_screen函数中,更改如下:

def update_screen(ai_settings, screen, ship, bullets):
    screen.fill(ai_settings.bg_color)
    for bullet in bullets.sprites():
        bullet.draw_bullet()
        print("画出子弹")
        bullet.update()
    ship.blitme()
    pygame.display.flip()

也就是说增加第5,6行,根本的原因在于没有让子弹的位置产生个更新。这也是本书上的错误。书上是没有bullet.update()这句话的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值