【问题标题】:Why is my sprite not moving为什么我的精灵不动
【发布时间】:2018-08-13 07:23:12
【问题描述】:

我的精灵应该在屏幕上从右向左移动,并且应该有多个相同的精灵从随机的 Y 坐标移动,而 X 应该保持不变。取而代之的是,目前没有运动,只有一个精灵。

            class Mob(pygame.sprite.Sprite):
                def __init__(self, x, y):
                    pygame.sprite.Sprite.__init__(self)
                    self.image = pygame.Surface((90, 90)).convert_alpha()
                    self.image = pygame.image.load(badguy_file).convert_alpha()
                    self.image = pygame.transform.scale(self.image, (100, 100))
                    self.rect = pygame.Rect(x, y, 100, 100)
                    self.x = x
                    self.y = y
                    self.rect.x = random.randrange(800 - 100)
                    self.rect.y = random.randrange(-100, -40)
                    self.speedx = 5
                    self.mask = pygame.mask.from_surface(self.image)

                def update(self):
                    self.rect.y += self.speedy
                    if self.rect.top > height + 10 or self.rect.left < -25 or self.rect.right > width + 20:
                        self.rect.x = random.randrange(width - self.rect.width)
                        self.rect.y = random.randrange(-100, -40)
                        self.speedx = random.randrange(2,0)

                def render(self, screen):
                    screen.blit(self.image, (self.x, self.y))

            mobYRange = random.randrange(200, 450)

            mobs = pygame.sprite.Group()       
            for i in range(8):
                mob = Mob(850,mobYRange)
                mobs.add(mob)
                mob.render(screen)

【问题讨论】:

  • 如果您没有使用 for 循环变量(在本例中为 i),您可以将其称为 _ 以指示它未使用/不相关。即for _ in range(8):

标签: python class pygame sprite


【解决方案1】:

您没有实际的随机 y 轴,因为一旦生成的随机列表被传递给 Mob 的所有实例,请使用以下代码:

mobs = pygame.sprite.Group()       
for i in range(8):
    mob = Mob(850, random.randrange(200, 450))
    mobs.add(mob)
    mob.render(screen)

【讨论】:

    【解决方案2】:

    当您选择 y 坐标时,您可以像 mobYRange = random.randrange(200, 450) 那样进行操作,然后您对所有生物使用相同的坐标。您需要将 randrange 的调用移动到创建 Mobs 的 for 循环中。

    我也不确定 pygame 是如何工作的。但是你应该只给screen.blit()打一次电话吗?我会猜到这是你调用每一帧的东西,以不断将它绘制到屏幕上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-31
      • 2014-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-30
      • 1970-01-01
      相关资源
      最近更新 更多