处理脚本无法以javascript身份运行

时间:2012-12-05 03:57:05

标签: processing processing.js

相对简单的处理脚本在2.0 IDE的Javascript模式和浏览器(通过Processing.JS)中都失败,原因不明。我很确定同样的问题是停止这两种方法。我已经隔离了导致失败的一行,并在以下页面中进行了说明:

  • Test1.html是可以使用的项目脚本的简化版本
  • Test2.html演示了在调用单个额外命令时(第93行)Test1如何失败,尽管它在IDE的Java模式下工作正常。违规行仅试图重新打印已在void setup(){}中成功打印的信息,因此我感到困惑。

所有脚本均可查看here,但Test2.pde中的关键行位于void drawLinks()

知道造成这种情况的原因是什么?我现在浪费了这么多时间!可以将Test2.pde script复制/粘贴到新的Processing 2.0 IDE中,以便在Java和Javascript模式下使用它。

3 个答案:

答案 0 :(得分:2)

如果您在Processing IDE中创建了代码,则无法直接在Web浏览器中使用,要在Web浏览器中运行脚本,您主要有两个选项:

A)您可以从Processing导出java-applet。然后可以将其嵌入到您的网页中。这将文件视为java-applet,因此即使它工作,它也许不是优雅的解决方案。

B)ProcessingJS正在读取处理文件并在Web浏览器中将其作为本机javascript运行。您下载JS库并生成一个文件以导入它并指向处理源文件,然后在本机javascript中对其进行解析和绘制。

答案 1 :(得分:1)

我发现在使用OOP和processing.js时,必须在this.之前添加所有实例变量才能使其正常工作,尤其是在arrayArrayList中实例化这些对象时class Route { ArrayList<Integer> cities; float distance; Route(ArrayList CITIES, float DISTANCE) { this.cities = CITIES; this.distance = DISTANCE; } } 。您需要对所有构造函数和方法进行此修改。

例如:

{{1}}

有关实际示例,请查看我.pde linked来源中的interactive resume

修改后的代码仍将在Processing:Java / Standard Mode中执行,但过于冗长。如果我将项目移植到processing.js或者希望项目在标准/ Java和JavaScript(processing.js)模式下工作,我通常只会进行此更改。

答案 2 :(得分:1)

这似乎是ProcessingJS的ArrayList版本的问题。虽然它是specified properly,但构造函数中似乎存在一个错误,它接受了initialCapacity。最新的错误报告also shows this

tl; dr:从第65行的arrayList创建中删除变量n,

this.links = new ArrayList<Link>(n);

应该成为:

this.links = new ArrayList<Link>();