Pygame实战之外星人入侵NO.5——操作子弹

上一篇我们可以发射子弹了,也可以清晰地看到子弹“消失”在了屏幕上段,其实这是个假象,它只是消失在我们的视野中,但仍在内存中,消耗着宝贵的资源,我们要彻底消灭它……
在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时就到了屏幕顶端,然后为负数~~
注意最后一行代码,输出当前子弹的数量,用于测试的,之后要注释掉,不然会很消耗内存:

对了,别忘了在主程序中调用此函数:
 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中

这样每次最多发射五颗子弹:
欧克,下一篇即将出场我们的主角——外星人……

猜你喜欢

转载自blog.csdn.net/u014483914/article/details/80098966