好吧我是一个完整的pygame和编程的noob一般。然而,我一直在玩游戏,玩家跌倒和躲闪物体。这个想法是,玩家保持在屏幕的前1/4,并且所有东西都会向上滚动,以产生移动的幻觉。这工作正常,但下面的代码是我尝试并得到另一面墙的产卵。这应该通过删除精灵,当它离开屏幕,并产生一个新的精灵,当图像开始离开屏幕。 -2是它应该跨越多远,直到另一个产生,我的逻辑是检查组的大小。虽然它只包含一个,但它会遍历下一部分代码,定义一个与旧的精灵完全相同但位于其下的新精灵。但是,这会导致程序崩溃,可能是因为旧的精灵被删除导致无限循环。所以如果这是真的,你如何定义一个具有相同属性的新精灵而不杀死其他精灵?当pygame中添加另一个精灵时,我的精灵正在被删除
此外,我意识到代码将不会多次工作,因为我使用了“left_wall”,删除后不会定义它,所以我尝试使用“wall”作为迭代通过定义每个sprite作为墙的组因此每次添加新墙时,都应该将其定义为墙,以便我可以无限地工作。但是,我错误消息AttributeError:'游戏'对象没有属性'墙'。所以在这一刻我被困住了,不知道下一步该怎么做。
编辑:当我使用“wall”这个属性错误的原因时,我忘了脱掉“self”,但它仍然像第一段中提到的那样崩溃,这可能是由于旧的精灵被删除。
对不起,如果这是混乱或不正确的结构化问题(就像我说的,我是一个noob)。
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