首页 > 解决方案 > 为什么我的精灵不动

问题描述

我的精灵应该在屏幕上从右向左移动,并且应该有多个相同的精灵从随机的 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)

标签: pythonclasspygamesprite

解决方案


当您选择 y 坐标时,您会这样做mobYRange = random.randrange(200, 450),然后您对所有小怪使用相同的坐标。您需要将调用移动到创建srandrange的 for 循环中。Mob

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


推荐阅读