关于子弹的发射问题,我出现了以下问题,以下记录如何解决的:
第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()这句话的。