从本质上讲,我试图在屏幕上显示多个弹丸,以使玩家避免使用。
在这一点上,我并不担心命中框之类的事情,而只是想让多个弹丸显示出来。它显示一个,然后弹丸从屏幕上消失,再也不会显示出来。
我认为这可能是范围问题,但我不确定。我几乎遍历了所有我能想到的代码,但都没有用。
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))
我正在尝试在屏幕上获得多个弹头型敌人。我查看了一些有关如何执行此类操作的教程,但无法获得预期的结果。
答案 0 :(得分:0)
需要解决的问题很少。不确定这些修补程序是否足够,但是至少它们会有所帮助。
类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()
函数的显示。