上一篇我们可以发射子弹了,也可以清晰地看到子弹“消失”在了屏幕上段,其实这是个假象,它只是消失在我们的视野中,但仍在内存中,消耗着宝贵的资源,我们要彻底消灭它……
在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中

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


友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信