如何在python中自动生成类的实例?

时间:2013-11-25 17:09:06

标签: python class pygame instance

我在python 3.3中使用pygame制作一个小游戏,我有一个敌人类(见下文)。如果我想每10秒左右在一个新敌人中产卵,那么从理论上讲,游戏可以永远持续下去。然而,这需要每10秒自动生成类的实例。有没有办法自动创建敌人类的新实例?

敌人类:

class Enemy(object):
    def __init__(self, image, posx, posy, speed, damage):
        self.image = image
        self.posx = posx
        self.posy = posy
        self.speed = speed
        self.damage = damage
    def move(self):
        self.posy = self.posy + self.speed
    def draw(self):
        screen.blit(self.image, (self.posx, self.posy))
编辑:对不起!我发布了这个,没有意识到我没有写完我的解释。我道歉!

4 个答案:

答案 0 :(得分:3)

你需要在某处存放衍生的敌人。假设它是一个列表:

enemies = []
...
# every 10 secs
enemy = Enemy()
enemies.add(enemy)

然后,当敌人被杀时,你想将其从该名单中删除。

答案 1 :(得分:2)

查看名为time

的模块

你需要做这样的事情:

import time

nSeconds = 11
t0 = time.clock()
dt = 0
enemyCount = 0

# the following would be in an appropriate
# place in the main game loop
if dt < nSeconds:
    t1 = time.clock()
    dt = t1 - t0
else:
    enemyInstance = Enemy()
    enemyCount += 1
    t0 = time.clock()
    dt = 0

你可以跟踪敌人的数量,以防你想在一些敌人之后发送一个特殊的波浪或给予奖励积分等等。

还可以看一下这本关于python中游戏开发的书,以了解其他想法:http://inventwithpython.com/makinggames.pdf

答案 2 :(得分:1)

在游戏中通常会有一个主游戏循环,其中输入被读取,模拟被提前并且屏幕被渲染。在该循环中,您可以检查自上次创建敌人以来经过了多长时间,如果有足够的时间飞行,您可以创建一个。

答案 3 :(得分:1)

# before mainloop
enemies = []
time_for_next_enemy = pygame.time.get_ticks() + 10000 # 10 seconds , 1000ms = 1s

# in mainloop
if pygame.time.get_ticks() >= time_for_next_enemy:
    enemy = Enemy()
    enemies.add(enemy)
    time_for_next_enemy = pygame.time.get_ticks() + 10000