上一篇我们可以发射子弹了,也可以清晰地看到子弹“消失”在了屏幕上段,其实这是个假象,它只是消失在我们的视野中,但仍在内存中,消耗着宝贵的资源,我们要彻底消灭它……
在game_functions.py中我们添加新的函数update_bullets:
def update_bullets(bullets):
bullets.update() #将为组bullets中的每一颗子弹调用bullets.update()
#删除已经消失的子弹
for bullet in bullets.copy(): #遍历编组的副本,这样不会删除列表中的条目
if bullet.rect.bottom<=0:
bullets.remove(bullet)
#print(len(bullets)) #显示当前还有多少子弹
其实这一段是写在主程序中的,为了简化主程序就在这里给他安家了,注意要先更新子弹的位置再判断它是否飞出了屏幕,很明显这里用了bottom属性,因为屏幕顶部的y坐标为0,(rect四个属性left、right、bottom、top,前两个看x坐标,后两个看y坐标,不知道能不能这样理解。。)子弹一直往上走,y坐标逐渐变小,变成0时就到了屏幕顶端,然后为负数~~
注意最后一行代码,输出当前子弹的数量,用于测试的,之后要注释掉,不然会很消耗内存:
![](https://i-blog.csdnimg.cn/blog_migrate/2ba6b7f5491d84a749739c384bc45034.png)
对了,别忘了在主程序中调用此函数:
gf.update_bullets(bullets)
这个是放在主循环中的。。
最后我们要限制子弹的数量,以便我们能有目的地打击,而不是乱开枪:
在settings.py中为子弹添加新的属性:
self.bullet_count=5
然后在game_functions.py中检查按空格键时的操作:
elif event.key==pygame.K_SPACE:
if len(bullets)<ai_settings.bullet_count: #限制出现在屏幕中的子弹数量
new_b=Bullet(ai_settings,screen,ship) #创建子弹
bullets.add(new_b) #将子弹加入到bullets中
这样每次最多发射五颗子弹:
![](https://i-blog.csdnimg.cn/blog_migrate/d58a1e72ab5b1182da88b1e5f0ebf9a4.png)
欧克,下一篇即将出场我们的主角——外星人……