【发布时间】:2017-08-28 22:47:59
【问题描述】:
好吧,我对 pygame 和一般编程完全是个菜鸟。然而,我一直在开发一款玩家跌倒并躲避物体的游戏。这个想法是玩家保持在屏幕的顶部 1/4 内,并且所有内容都向上滚动以产生移动的错觉。这很好用,但是下面的代码是我尝试生成另一堵墙的地方。这应该通过在精灵离开屏幕时删除它并在图像开始离开屏幕时产生一个新精灵来工作。 -2 是在产生另一个之前它应该跨越多远,我的逻辑是检查组的大小。虽然它只包含一个,但它会遍历下一段代码,定义一个与旧墙精灵相同但位于其下方的新墙精灵。然而,这可能会导致程序崩溃,因为旧的精灵被删除导致无限循环。所以如果这是真的,你如何定义一个具有相同属性的新精灵而不杀死另一个?
我还意识到代码甚至不会多次工作,因为我使用了“left_wall”,它在被删除后不会被定义,所以我尝试使用“wall”,因为我在 for 循环中迭代将每个精灵定义为墙的组所以每次添加新墙时,它都应该被定义为墙,这样我就可以无限地工作。但是我这个错误消息 AttributeError: 'Game' object has no attribute 'wall'。所以此刻我被卡住了,不知道下一步该做什么。
编辑:我在使用“wall”时忘记取消“self”,这是导致属性错误的原因,但是它仍然像我在第一段中提到的那样崩溃,这可能是由于旧的精灵被删除了。
对不起,如果这令人困惑或不是一个结构合理的问题(就像我说的,我是菜鸟)。
for wall in self.left_wall_sprite:
wall.rect.y -= self.player.vel.y
if wall.rect.bottom < 0: # move left wall
wall.kill()
if wall.rect.top == -2: # a new wall needs to be spawned
while len(self.left_wall_sprite) < 2:
self.new_left_wall = self.left_wall
self.new_left_wall.rect.top = self.left_wall.rect.bottom
self.all_sprites.add(self.new_left_wall)
self.left_wall_sprite.add(self.new_left_wall) # add the new sprite to the wall group so that it runs through the same cycle
【问题讨论】:
标签: python-3.x pygame