Pygame Sprite。如何从同一个班级创建不同的敌人/图像?

时间:2013-07-25 13:06:09

标签: python pygame sprite

我正在使用Pygame构建一个基于平台的小游戏。我想从我的敌人有一个图形到几个不同的图形。我的想法是将它们全部放入一个数组中,并在启动时从中随机绘制,以获得随机选择的图形的几个精灵。

但结果是我得到所有精灵的enemy1.png或enemy2.png。我不确定这是否真的很简单,我只是无法看到它,或者我是否需要扩展每个新图形的敌人类我希望敌人拥有?

我尝试了两件基本相同的东西,我从两者得到了相同的结果。

第一个想法:

class Enemy(pygame.sprite.Sprite):

    enemyArray = [pygame.image.load('enemy1.png'), pygame.image.load('enemy2.png')]

    def __init__(self, location, *groups):
        super(Enemy, self).__init__(*groups)

        for i in self.enemyArray:
            self.image = choice(self.enemyArray)

        self.rect = pygame.rect.Rect(location, self.image.get_size())
        self.direction = 1

第二个想法:

class Enemy(pygame.sprite.Sprite):

    enemyArray = [pygame.image.load('enemy.png'), pygame.image.load('bomb.png')]
    for i in enemyArray:
        image = choice(enemyArray)

    def __init__(self, location, *groups):
        super(Enemy, self).__init__(*groups)

        self.rect = pygame.rect.Rect(location, self.image.get_size())
        self.direction = 1

我已经使用互联网找到一些指导,但我找不到任何似乎可以处理这个问题的东西。任何有用的东西,从现成的代码片段到可能启发我的链接。

更新

class Game(object):
    def main(self, screen):
        ...
        self.enemies = tmx.SpriteLayer()
        for enemy in self.tilemap.layers['triggers'].find('enemy'):
            Enemy((enemy.px, enemy.py), self.enemies)
        self.tilemap.layers.append(self.enemies)

我使用了我在Tiled中创建的tilemap,因此对于每个敌人触发器,都会有一个敌人产生。这够了吗?

1 个答案:

答案 0 :(得分:1)

在第二个想法中你有一条线:

image = choice(enemyArray)

这应该不起作用,因为你正在创建一个局部变量图像,根本不会存储到Enemy类中。但是你在第一个想法中没有这个错误。设置属性的正确方法如下:

self.image = choice(enemyArray)

然后你可以改变:

 for i in enemyArray:
     image = choice(enemyArray)

成:

image = choice(enemyArray)

因为它没有任何区别,当你在enemyArray中有2张照片时,你只是掷骰子2次。