更新多个对象而不为它们创建单独的变量

时间:2015-04-26 06:37:42

标签: python pygame

在游戏中,当敌人加载时,“敌人”会被创建为类中的对象。

当屏幕刷新时,每个人都需要更新他们的X和Y位置。但由于存在多个敌人,我需要创建一长段代码,告诉每个敌人对象更新。

例如:

enemy1 = Enemy()
enemy2 = Enemy()
enemy3 = Enemy()
...
enemy1.update()
enemy2.update()
enemy3.update()
...

我需要一种在需要时创建这些对象的方法,而不需要为每一个创建一个变量,并且一个函数可以在屏幕刷新时更新敌人类中的所有对象。

2 个答案:

答案 0 :(得分:0)

你可以这样做:

class Enemy(object):

    def __init__(self):
        pass

    def update(self):
        pass # we will call this function during updates.

enemies = []
for iter in range(10):
    enemies.append(Enemy()) # creating 10 Enemies and appending it into list

for enemy in enemies:
    enemy.update() #updating every enemy in the list

答案相当容易。在创建敌人期间将其附加到列表中。之后,如果您需要计算其x / y位置,只需迭代该列表即可。但是如果你不再需要,请记住列表中的removedel敌人。

CNC中 我也会推荐你这本书:

  

绝对初学者的Python编程

迈克尔道森。 这是一本非常好的书。写给人们想学习如何在python中创建游戏。你应该阅读它。

答案 1 :(得分:0)

Pygame为这种情况提供原生支持。

class Enemy(pygame.sprite.Sprite):
    "do useful stuff"
enemies = pygame.sprtie.Group()
for _ in xrange(10): #initialize enemy list
     Enemy(enemies)
enemies.update() #update all the enemies
enemies.update(5, 6) #call the update method on each enemy with the args 5 and 6