擅长:python、mysql、java
<p>我想大多数人首先想到的答案应该是:“你想错了!”--如果遵循传统的gamedev方法,这一点实际上是正确的;jsbueno和monkey向您展示了通常情况下如何去那里。在</p>
<p>我只想指出一个python项目,它试图以解决问题的方式给出解决方案。其主张是:现实世界是并发的,所以你应该以并发的方式对其进行建模(事实上,你的直觉方法是并发的,这就支持了这一点)。在</p>
<p>问题是,在这个问题上使用真正的多线程方法肯定会给您带来比解决问题更多的问题,因为您必须考虑竞争条件等(因此sajattack的答案是mutex)。另外,如果你的游戏中有数百个精灵/物体(这不是一个很高的数字,如果你想开始想大一点的话,那几百个线程的开销很可能会对糟糕的计算机处理过度。在</p>
<p>这就是为什么有些人启动了一个名为<a href="http://www.stackless.com/" rel="nofollow">stackless python</a>的项目。他们想提供一种工具,让你在没有多线程的情况下以并发方式进行编程!有了它,你可以像你建议的那样编程,让一个函数等待,而其他函数继续运行。他们称之为微线程(microthreads)</em>背后的概念还有一篇很好的文章给你一个<a href="http://www.grant-olson.net/python/intro-to-stackless-python/browsable-html" rel="nofollow">introduction to concurrent thinking in programming</a>。您可能需要查看该项目,但这可能会给您留下几个问题:</p>
<ol>
<li>您需要一个不同版本的python解释器。Stackless不在标准的c-python和pypy中,而且很可能不会很快出现。在</li>
<li>使用不同的解释器这一事实将使分发任何用无堆栈python编写的游戏变得更加困难。在</li>
<li>你可能会学到一种不寻常的游戏编程方法——这在将来的某个时候可能很重要(或者可能不重要)。在与现实生活中的程序员交谈或阅读现有游戏资源时,可能会给你带来麻烦。这可能是一个好主意,先做一些<em>经典</em>游戏编程,或者除了stackless之外。在</li>
</ol>