我正在python中构建一个游戏,并且我想创建一个事件侦听器来检查主角色的hp是小于还是等于0,然后通过函数执行游戏。在其他语言(vb.net)中,我通过创建一个不断循环if语句直到条件满足的新线程来实现此目的,然后通过代码运行游戏,然后关闭自身。你如何在python中创建/启动/关闭线程?另外,有没有更好的方法可以坐在我面前?你如何在Python中创建一个新的线程?
回答
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
这确实没有如果发生多个事件,那么使用线程和使用线程是最糟糕的做法。然而在你的文字游戏中,可能没有太多元素参与其中,所以不太可能出现竞争状况。不过要小心。我总是喜欢这些循环而不是线程。
非常感谢你 –
请** rtfm **。这是一个坏主意。像Clickteam Fusion和YoYo GameMaker这样的游戏引擎,最好使用帧循环迭代。 –
so ...是threading.thread一个通用对象吗? (我的意思是它存在于所有现代语言中的某种相似形式?) –
- 1. 在Python中创建一个新线程
- 2. 你如何在Python中创建一个守护进程?
- 3. 如何创建一个新线程
- 4. 你如何使用opengl支持在java中创建新线程?
- 5. 你将如何创建一个在Python中重试的选项?
- 6. 如何在WinJS中创建一个新线程(WinRT)
- 7. 如何禁止一个jar在java中创建新线程
- 8. 你如何创建一个多线程的asp.net ajax更新面板?
- 9. 你如何加入/中止一组动态创建的线程?
- 10. 你将如何创建一个线程消息系统?
- 11. 在python中创建线程
- 12. 如何创建一个在C编程中创建另一个线程的线程?
- 13. 如何在一个线程中创建一个TextView?
- 14. 创建一个GUI更新线程
- 15. Task.WhenAll() - 它创建一个新线程吗?
- 16. 从一个新线程创建NewGlobalRef
- 17. 如何创建一个线程
- 18. 用newSingleThreadExecutor创建的线程是一个新创建的线程还是一个deamon线程?
- 19. 如何每次在C#中收到新连接时创建一个新线程?
- 20. 如何创建一个以Java绘制屏幕的新线程?
- 21. 在python中创建一个新类型
- 22. 在Python中创建一个新文件
- 23. 如何在Python中创建一个CFuncType
- 24. 如何在Python中创建一个不断更新的标签
- 25. Python:创建一个新进程
- 26. 在C#中创建一个线程#
- 27. 在任务中创建一个线程
- 28. 如何在同一个类中创建多个线程?
- 29. 如何确定从另一个线程创建哪个线程?
- 30. 如何在不同的QT线程中创建一个窗口?
你可以通过这样做来获得一个Race Condition。 –
什么是竞赛条件? –
没关系。当游戏变得复杂时,仍然认为这是一个糟糕的主意。 –