在更新方法中使用逻辑

时间:2014-04-10 05:34:39

标签: python-2.7 pygame

我正和一些同学一起做一个小游戏,我想要一些关于如何处理这个问题的指导......

使用我的代码归结为我想要使用Boss_Shoot类,其中Boss类update()开始打印“应该正在拍摄”..看到的打印语句语句只不过是一个“占位符......

一如既往地非常感谢!

class Boss(pygame.sprite.Sprite):
  def __init__(self):
    pygame.sprite.Sprite.__init__(self)
    self.image = pygame.image.load("sprites/boss.png")
    self.rect = self.image.get_rect()
    self.dx = 1
    self.dy = 1
    self.shoot= True

 def update(self):

    if self.rect.centerx >= 600:
        self.rect.centerx -= self.dx
    elif self.rect.centerx <= 600:

        print "should be shooting"
    self.rect.centery -= self.dy
    self.checkBounds()

def checkBounds(self):
    if self.rect.top <= 0:
        self.dy *= -1
        print 
    if self.rect.bottom >= 500:
        self.dy *= -1

class Boss_Shoot(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((20, 20))
        self.image.fill((255, 0, 0))
        self.rect = self.image.get_rect()
        self.rect.center = (320, 240)
        self.dy =2

    def update(self):
        if self.shoot == True:
            print "shooting"
        for i in range(100):   
            print "wtf man"
            self.rect.x = random.randrange(1000, 3000)
            self.rect.y = random. randrange(10, 490)
            self.rect.x -= 5
            self.rect.y +=self.dy

1 个答案:

答案 0 :(得分:1)

你需要一种方式,你的演员(或精灵,或任何你称之为&#34;实体&#34;)的方式可以与游戏的全局状态进行通信。

您没有显示所有代码,因此我假设所有内容都在一个文件中。

在代码的某处,你可能有一个所有演员的列表(如果你不这样做,你应该创建一个)。我们假设它被定义为:

actors = []

也许您使用单个列表,也许您想要使用pygame&#39; Group类。

我进一步假设您在主循环中的所有actor上调用update()方法,例如:

for a in actors:
    a.update()

(或者,如果你使用pygame&#39; s Group类,那就像mygroup.update())。

现在,在update()的{​​{1}}方法中,只需创建Boss的新实例,并将其添加到演员列表中,例如:

Boss_Shoot

您可能希望将def update(self): if self.rect.centerx >= 600: self.rect.centerx -= self.dx elif self.rect.centerx <= 600: actors.append(Boss_Shoot()) 的位置传递给Boss构造函数,以便子弹(或其他)不会随机出现在屏幕上(如果您愿意)。


我更喜欢将游戏状态封装成单独的Boss_Shootdict,然后将其传递给每个演员,以便每个演员可以注册/取消注册世界,例如:

class

你会明白这一点。