结合Processing.js和Web Workers的强大功能

Jor*_*enB 7 javascript processing.js web-worker

我一直在阅读Javascript语言中的两个(相对)新概念 - Web Workers和John Resig的令人敬畏的Processing.js(好吧,不是真正的新'Javascript概念',但你得到了我的想法).两个很好的例子都徘徊在互联网上,但我还没有找到一个有效地采用这两种技术的例子.它看起来非常有趣和强大,所以我想我最好试一试.

但是,我无法找到最好的脚本设计来集成它们两个......在我看来,通常,当使用Processing.js时,某些类 "Processing-application" 中定义.它允许您使用类似Java的语法来解决此问题.但是,这些类只能在Processing-application中访问 - 这很明显.但后来我们得到了工人......在这个惊人的例子中,Javascript函数对象首先在一个单独的脚本中定义,如果需要Worker-usage,那么Worker-script会导入该对象的原型和类型的'bolt'本身就可以了.

对我来说,这两者看起来并不"可互换",因为当你在Worker脚本中时,你无法访问在Processing-application中定义的类.可能有一个原因,因为类似处理的类肯定不是很像Javascript.据我所知,我将不得不在我的Worker脚本中对类进行类似的定义(以新函数原型的形式) - 这对于可维护性来说不是很好,而且看起来非常糟糕的设计对我来说,即使我仍然是这个主题的新手.

我忽略了什么吗?我想要一些不应该的东西吗?或者我只是误解了一些基本概念?

谢谢您的帮助!

编辑:

继续尝试弄乱工人的原型,以便"塑造"它就像它应该工作的对象一样,但很快意识到这不是可行的方法.

让我们尝试使用一个大纲:我有一个类'Ball',除了存储二维位置之外几乎什么都不做.在每个draw()循环中,Processing.js调用其update()方法,这使得Ball采用新的位置.然后,display()调用该方法,让Ball在其当前位置绘制一个小圆圈.

没什么好开始的.现在,假设确定球的新位置是一个非常昂贵的操作 - 例如,如果它涉及球通过'复杂'引力场的运动.如果必须在绘制之前每次进行此计算,则至少会导致一些延迟.但是,如果您设法同时执行此操作,则可能会更顺畅地运行.所以,我发现我可以给Ball类在其属性列表中添加一个额外的'位置'数组,它将保存所有连续的位置.当球被实例化时,它会创建一个新的工人,它将开始计算位置,每次完成一个位置时,它会将一条消息回发给Ball,其中包含一个新的二维位置.然后Ball会将这个推到它的位置数组上,所以每次它必须更新它的位置时,它只会走到数组中的下一个记录.

总而言之 - 好的或坏的想法?如果好,有关如何设计的任何建议吗?

Dus*_*etz 3

3D 游戏物理模拟(如 xbox360)通常以固定速率运行,与帧速率无关。这是因为物理学太复杂,无法进行分析建模,因此您需要进行数值近似,因此需要确定性地同步误差。额外的好处是帧速率与物理性能分离,因此您可以以 5hz 更新物理并进行插值等。

所以你描述的模型正是专业人士的做法。