python - 试图在屏幕上显示多个弹丸
问题描述
本质上,我试图在屏幕上显示多个弹丸,让玩家避免。
在这一点上,我并不担心命中框或类似的东西,只是简单地尝试让多个射弹显示。它显示一个,然后弹丸从屏幕上消失并且永远不会重新出现。
我相信这可能是一个范围问题,但我并不完全确定。我几乎移动了我能想到的每段代码,但无济于事。
class Game:
clock = pygame.time.Clock()
def __init__(self):
self.enemy = Projectile()
self.enemies = []
def loop(self):
self.clock.tick(30)
for enemy in self.enemies:
if self.enemy.y < 925 and self.enemy.x < self.screen_width:
self.enemy.x += self.enemy.velocity
self.enemy.frame_count += 1
else:
self.enemies.pop(self.enemies.index(self.enemy))
if len(self.enemies) < 5:
self.enemies.append(self.enemy)
def render(self):
# other stuff
for enemy in self.enemies:
self.enemy.draw_projectile(self._display_surf)
然后在我的弹丸文件中,我有:
class Projectile():
# projectile images
def __init__(self):
# stuff
def draw(self, gameDisplay):
if self.frame_count > 118:
self.frame_count = 0
display_window.blit(self.projectile_sprites[self.frame_count],(self.x, self.y))
我正在尝试在屏幕上显示多个射弹型敌人。我查看了一些有关如何执行此类操作的教程,但无法获得预期的结果。
解决方案
很少有事情需要修复。不确定这些修复是否足够,但至少它们会有所帮助。
Projectile
从语法上讲,班级似乎还可以。不过,我不能为省略的部分说话。
但是,您永远不会在函数中使用gameDisplay
参数draw
,但您有一个display_window
. 他们应该是同一件事吗?如果是这样,请使用相同的名称。
我猜display_window
/gameDisplay
是显示器,表面用pygame.display.set_mode()
. 如果是这样,那很好。
对于Game
课程,请参阅我添加的评论。
class Game:
clock = pygame.time.Clock()
def __init__(self):
#self.enemy = Projectile() remove this line, is useless.
self.enemies = []
def loop(self):
self.clock.tick(30)
for enemy in self.enemies:
if enemy.y < 925 and enemy.x < self.screen_width:
#no need of self before enemy in this section. Otherwise you
#do not refer to the "enemy" on which you are looping but to
#the attribute "enemy" (which I removed). They are different things.
enemy.x += enemy.velocity
enemy.frame_count += 1
else:
self.enemies.pop(self.enemies.index(enemy))
#I leave this here for now, but remember that editing
#a list on which you are looping is a bad idea in general.
if len(self.enemies) < 5:
self.enemies.append(Projectile())
#each iteration you need to create a new instance of the class.
def render(self):
# other stuff
for enemy in self.enemies:
enemy.draw(self._display_surf)
#again, no self before enemy, same reason of before.
我不知道是什么draw_projectile()
。我想你的意思是使用类的draw()
方法Projectile
,这很有意义。
同样self._display_surf
没有在您的代码中定义,我想是您传递给draw()
函数的显示。
推荐阅读
- bash - 如何从我的所有 git 存储库中推送所有未提交和未推送的更改?
- javascript - 如何使材料表中只有 1 行可编辑?
- shiny - dashboardBody 没有在 Shiny 中返回正确的 tabItem
- python - 如何使用 Python 多次与命令行交互而不会丢失工作目录等特定于实例的变量?
- java - 孤立岛上的垃圾收集
- javascript - 如何优化在 javascript / typescript 中返回承诺的多个嵌套调用?
- c++ - C++ 中用于初始化元素的统一初始化程序的限制是什么?
- apache - Apached Web 流量路由到后端应用程序
- c# - 将字符串转换为类型时出错 - Newtonsoft JSON 反序列化
- python - Python - Selenium .text 求解数学公式