在pygame中管理组

时间:2013-07-09 14:50:56

标签: python pygame

我正在创造一个游戏,当你杀死一个暴徒时,会出现另外两个。我有它,所以当你杀死一个暴徒,其他两个出现,但只有一个保持可见,行为就像它应该的那样。另一个刚出现然后就消失了。我怎样才能得到它,以便它们都按照预期的方式运行。以下是我到目前为止的情况:

[MOB Class]

class MOB(pygame.sprite.Sprite):
    def __init__(self, location):
        self.pos = [0,0]
        self.image = ENEMY
        pygame.sprite.Sprite.__init__(self)
        self.rect = self.image.get_rect()
        self.rect.left, self.rect.top = location
        self.rect.right, self.rect.bottom = location
        self.rect.center = location
        self.speed = random
        self.hp = 4
    def update(self):
         if self.hp == 0:
            mobs.add(self)
            self.image = ENEMY
            self.pos = [0,0]
            self.hp = 4
    def moveH(self):
        if self.rect.centerx >= Player.rect.centerx:
            self.rect.left = self.rect.left - 4
        elif self.rect.centerx <= Player.rect.centerx:
            self.rect.left = self.rect.left + 4

        def moveV(self):
        if self.rect.centery <= Player.rect.centery:
            self.rect.top = self.rect.top + 4
        if self.rect.centery >= Player.rect.centery:
            self.rect.top = self.rect.top - 4

[在主循环中添加和删除]

for Mob in mobs:
    if Mob.hp == 0:
        score = score + 1
        Mob.kill()
        new_mobs = MOB([50, 50]), MOB([60, 300])
        mobs.add(*new_mobs)

[在主循环中重绘和移动]

for Mob in mobs:
    Mob.moveV()
    Mob.moveH()
    screen.blit(Mob.image, Mob.rect)

2 个答案:

答案 0 :(得分:0)

尝试使用mobs.remove(Mob)代替Mob.kill 它可能有效:D

答案 1 :(得分:0)

  1. 您的代码正在删除Rect的宽度和高度。如果要使用中心的坐标,请使用:

    self.rect = self.image.get_rect()
    self.rect.center = location
    
  2. mobs.add()中的update()是什么?因为通常每帧调用更新,我猜怪是一个精灵组。

  3. 您的更新:

    对暴民中的暴民来说:     Mob.moveV()     Mob.moveH()     screen.blit(Mob.image,Mob.rect)

  4. 应该是

    mobs.update()
    mobs.draw(screen)
    

    看看这个家伙的例子https://stackoverflow.com/a/10418347/341744