我在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))
编辑:对不起!我发布了这个,没有意识到我没有写完我的解释。我道歉!
答案 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