2015-12-21 41 views
0

我正在python中构建一个游戏,并且我想创建一个事件侦听器来检查主角色的hp是小于还是等于0,然后通过函数执行游戏。在其他语言(vb.net)中,我通过创建一个不断循环if语句直到条件满足的新线程来实现此目的,然后通过代码运行游戏,然后关闭自身。你如何在python中创建/启动/关闭线程?另外,有没有更好的方法可以坐在我面前?你如何在Python中创建一个新的线程?

+0

你可以通过这样做来获得一个Race Condition。 –

+0

什么是竞赛条件? –

+0

没关系。当游戏变得复杂时,仍然认为这是一个糟糕的主意。 –

回答

2
from threading import Thread 

def my_function(): 
    while True: 
     if player.lives < 5: 
      do_stuff() 

Thread(my_function).start() 

然而大部分的游戏都遵循帧循环规律发展的时代,具有以下结构:

def my_game(): 
    should_continue = False 
    while should_continue: 
     should_continue = update_logic() 
     update_graphics() 

你update_logic和update_graphics定义什么是你和图形库您正在使用(由于您使用的文字,你的函数将只打印您的控制台文本),但逻辑的一些例子会是这样的:

def update_logic(): 
    if player.lives < 5: 
     return False 
    # these are just examples, perhaps not valid in your game 
    player.xdirection = 0 
    player.ydirection = 0 
    player.speed = 0 
    player.hitting = False 
    if player.damage_received_timer > 0: 
     player.damage_received_timer -= 1 
    if right_key_pressed: 
     player.xdirection = 1 
    if left_key_pressed: 
     player.xdirection = -1 
    if up_key_pressed: 
     player.ydirection = -1 
    if down_key_pressed: 
     player.ydirection = +1 
    if player.ydirection or player.xdirection: 
     player.speed = 20 
    if space_key_pressed: 
     player.hitting = True 
    # bla bla bla more logic 
    return True 

这确实没有如果发生多个事件,那么使用线程和使用线程是最糟糕的做法。然而在你的文字游戏中,可能没有太多元素参与其中,所以不太可能出现竞争状况。不过要小心。我总是喜欢这些循环而不是线程。

+0

非常感谢你 –

+0

请** rtfm **。这是一个坏主意。像Clickteam Fusion和YoYo GameMaker这样的游戏引擎,最好使用帧循环迭代。 –

+0

so ...是threading.thread一个通用对象吗? (我的意思是它存在于所有现代语言中的某种相似形式?) –

相关问题