然而,我真的无法想出最佳脚本设计来集成它们两个...似乎通常情况下,当使用Processing.js时,一些类被定义在“Processing应用程序”内部。它允许您使用类似Java的语法来处理此问题。但是,这些类只能在Processing应用程序内部访问-这是显而易见的。但是我们有了Workers...在这个惊人的例子中,首先在单独的脚本中定义了一个Javascript函数对象,如果需要使用Worker,则Worker脚本导入该对象的原型并将其“螺栓”到该对象上。
对我来说,两者似乎不是“可互换的”,因为当您在Worker脚本中时,无法访问您在Processing应用程序中定义的类。很可能有一个原因,因为类似处理的类绝对不像Javascript。据我所见,我将不得不在我的Worker脚本中进行类似的定义(以新函数原型的形式)-这对可维护性来说并不是很好,并且对我来说只是非常糟糕的设计,尽管我在这个主题上仍然是一个大新手。
我有什么遗漏吗?我想要的东西可能根本不存在吗?还是我误解了一些基本概念?
谢谢帮助!
编辑:
随后尝试混淆Worker的原型,以便将其“塑造”成它应该为之工作的对象,但很快就意识到这不是正确的方法。
让我们尝试一个大纲: 我有一个名为“Ball”的类,除了存储二维位置外,几乎什么都不做。在每个
draw()
周期上,Processing.js调用它的update()
方法,使Ball采用新的位置。之后,调用display()
方法,Ball在其当前位置画一个小圆。
一开始并不复杂。现在,假设确定球的新位置是一个相当昂贵的操作 - 例如,如果它涉及到将球移动通过一个“复杂”的重力场。如果每次绘制之前都必须进行这个计算,那么至少会有一些延迟。然而,如果您能够同时完成这些工作,它可能会更加流畅。因此,我想出了一个办法,可以在Ball类的属性列表中添加一个额外的“positions”数组,该数组将保存其所有连续位置。当Ball被实例化时,它会创建一个新的Worker来开始计算位置,并且每次完成一个位置时,它都会向Ball发送一条消息,其中包含一个新的二维位置。然后,Ball将把这个位置推送到其位置数组中,所以每次更新其位置时,它只需走到数组中的下一个记录。
总的来说 - 是好还是坏的想法?如果是好的,对于如何设计它有什么建议吗?