Python 为什么我的精灵不动了

Python 为什么我的精灵不动了,python,class,pygame,sprite,Python,Class,Pygame,Sprite,我的精灵应该在屏幕上从右向左移动,并且应该有多个相同的精灵从随机Y坐标移动,其中X应该保持不变。取而代之的是,此时此刻,没有任何运动,只有一对精灵 class Mob(pygame.sprite.Sprite): def __init__(self, x, y): pygame.sprite.Sprite.__init__(self) self.image =

我的精灵应该在屏幕上从右向左移动,并且应该有多个相同的精灵从随机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)
类怪物(pygame.sprite.sprite):
定义初始化(self,x,y):
pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我)
self.image=pygame.Surface((90,90)).convert_alpha()
self.image=pygame.image.load(badguy_文件).convert_alpha()
self.image=pygame.transform.scale(self.image,(100100))
self.rect=pygame.rect(x,y,100100)
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更新(自我):
self.rect.y+=自加速
如果self.rect.top>高度+10或self.rect.left<-25或self.rect.right>宽度+20:
self.rect.x=random.randrange(宽度-self.rect.width)
self.rect.y=random.randrange(-100,-40)
self.speedx=random.randrange(2,0)
def渲染(自身,屏幕):
blit(self.image,(self.x,self.y))
mobYRange=random.randrange(200450)
mobs=pygame.sprite.Group()
对于范围(8)中的i:
移动=移动(850,移动范围)
mobs.add(mob)
移动渲染(屏幕)

当你选择y坐标时,你可以这样做
mobYRange=random.randrange(200450)
然后你对所有的怪物使用相同的坐标。您需要将对
randrange
的调用移动到for循环中,在该循环中创建
Mob
s


我也不确定pygame是如何工作的。但是你应该只调用一次screen.blit()?我猜这是你调用每一帧来将其一直绘制到屏幕上的东西。

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

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

如果未使用for循环变量(在本例中为
i
),则可以调用它
\uu
,以指示它未使用/不相关。即范围(8)内的
for: