1

我目前正在试验一款类似于太空侵略者的 JavaScript 射击游戏。现在的编码方式,无论是带有移动的弹丸还是船。玩过原版的人都知道这不好。我记得在我的 Java 类中讨论过多线程,并且想知道这是否是正确的方法,还是有其他方法可以做到这一点?例如:

Thread Move start;
Thread Move run;
Thread Shoot start;
Thread Move run;
Thread Shoot run;
Thread Shoot end;
Thread Move run;
Thread Move end;
4

2 回答 2

2

您可以在 Javascript 中使用WebWorkers,但它们的行为与真正的多线程环境相差甚远,就像在 java 中一样。你将不得不对你的游戏开发采取不同的方法,使用一种循环技术来更新你的游戏逻辑,所有这些都在同一个线程下,对不起。:( 在 javascript 中为线程添加的支持仍然非常骗人,在我看来几乎是一个噱头,唯一的一种是 Chrome,因为您不一定要复制传递给线程的所有数据。这就是为什么线程在 javascript 中受挫:

  1. 无法真正访问 dom
  2. 大多数(如果不是全部)数据(取决于引擎)必须复制到其他线程,这意味着如果您想在后台处理大量数据,则必须先对该数据执行复制
  3. WebWorkers 上的错误并不总是很明显(有时你会遇到随机的、难以理解的错误)

WebWorkers 有很大的潜力,但对我来说,它们的使用受到了当时对它们的限制的严重限制。也许您可以在游戏中找到它们的巧妙用途。

于 2013-03-21T21:42:19.127 回答
2

传统上,JavaScript 是单线程的,因此像在 Java 中使用的那样使用线程是不可行的。一个相对较新的 JavaScript 新增功能是提供真正的多线程的网络工作者(此处为规范)。但是,浏览器之间的支持有些不同,工作线程可以做的事情受到限制,线程之间的通信很痛苦。

您还可以使用Clumpy.js 之类的东西来模拟异步执行。

无论你做什么,重要的是不要阻塞主线程。整个浏览器窗口变得无响应。

于 2013-03-21T21:44:09.980 回答