python 历遍子弹_【python3小白上路系列】添加开炮功能~(四)

这篇博客介绍了一个pygame游戏开发中的问题,即如何处理和删除超出屏幕范围的子弹。作者通过创建子弹的副本并遍历检查,当子弹位置低于屏幕顶部时将其从编组中移除。这种方法确保了不会在循环中直接修改子弹列表,从而避免了错误。通过打印子弹数量验证了代码的有效性,并建议在确认工作正常后删除输出语句以提高游戏性能。
摘要由CSDN通过智能技术生成

昨天我们已经实现了开炮功能,但是随着子弹越来越多,我们需要把已经消失的子弹删除。这里肯定有疑问,既然已经消失了不就删除了吗?其实并没有,只是超过窗口大小的子弹我们看不见而已,所以我们要通过代码删除这些子弹。

1.5.5 删除已消失的子弹

import pygame

from pygame.sprite import Group

from setting import Settings

from ship import Ship

import game_functions as gf

def rungame():

#初始化游戏并创建一个屏幕对象

pygame.init()

#实例化设置对象

ai_settings = Settings()

screen = pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))

pygame.display.set_caption("Alien Invasion")

#创建一只飞船

ship = Ship(ai_settings,screen)

#创建一个用于存储子弹的编组

bullets = Group()

#开始游戏主循环

while True:

gf.check_events(ai_settings,screen,ship,bullets)

ship.update()

bullets.update()

# 删除已消失的子弹

for bullet in bullets.copy():

if bullet.rect.bottom <= 0:

bullets.remove(bullet)

print(len(bullets))

gf.update_screen(ai_settings,screen,ship,bullets)

rungame()

在for 循环中,不应从列表或编组中删除条目,因此必须遍历编组的副本。我们使用了方法copy() 来设置for 循环,这让我们能够在循环中修改bullets 。我们检查每颗子弹,看看它是否已从屏幕顶端消失。如果是这样,就将其从bullets 中删除。最后我们使用了一条print 语句,以显示当前还有多少颗子弹, 从而核实已消失的子弹确实删除了。

如果这些代码没有问题,我们发射子弹后查看终端窗口时,将发现随着子弹一颗颗地在屏幕顶端消失,子弹数将逐渐降为零。运行这个游戏并确认子弹已被删除后,将这条print语句删除。如果你留下这条语句,游戏的速度将大大降低,因为将输出写入到终端而花费的时间比将图形绘制到游戏窗口花费的时间还多。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值