2012-12-26 23 views
1

我以paper.js开头。我喜欢这样一个事实,即它引入了一个脚本,其中包含一个text/paperscript mime类型的脚本,该脚本在其范围内运行。但是,脚本可能会很快变大,所以我希望能够将它分成多个脚本以提高可读性。我认为我可以添加多个脚本标记,并让它们都在相同的范围内运行,但显然情况并非如此。同一个paperscope中的多个脚本/说明文字

这两个脚本都被加载并运行,但第二个脚本似乎不在纸张范围内。

我在这里设置了一个例子:http://barbata.nl/SO/Maps/这个例子有一些代码,但我会指出一些重要的部分。

它包含两个paperscripts:

  • Maps.js是主要的脚本,栅格化图像,并允许移动它。您可以忽略此脚本中的代码,因为它迄今为止工作正常。

  • Zoom.js是我想要分离缩放功能的脚本。它使用jq.mobi来捕获鼠标的滚轮,因为Paper.js似乎没有该事件。然后它将它转换为对onMouseScroll的调用,与Paper类似。

到目前为止好。实际的问题出现在zoom.js.中的zoomInzoomOut函数中。

如果我明确地使用纸张对象引用我想缩放视图它的工作原理:

​​

但它没有,当我删除paper和刚才提到的观点:

function zoomIn() 
{ 
    if (view.zoom < 2) 
    { 
    view.zoom = view.zoom * 2; 
    } 
} 

这让我感到意外,因为我预计该脚本将成为Paperscope中的Paperscript。如果我将这段代码放到Maps.js中,它可以正常工作,所以似乎尽管Paper.js(浏览器中的开发人员工具确认了这一点)加载了zoom.js,但它并未在Paperscope中运行。

我的问题是:我的发现是否正确?难道我做错了什么?为了便于阅读,将Paper.js应用程序划分为多个单元的正确方法是什么?

当然,我可以让它运行,但我想确保我做对了。

回答

1

这确实是如何工作的。我已经打开issue on GitHub

+1

请注意,这是自2013年3月列入Paper.js这里把它的人喜欢我,谁没不要点击GitHub问题链接,也不要向下滚动查看是否存在修复和拉取请求。 – speps

0

我发现“最干净的”方法是使用this.install(window)来完成。它还使得使用Chrome开发人员工具更容易找到错误,因为它更适合于报告java-script中的行错误而不是“paperscript”。

index.html中(例如)

<script type="text/javascript" src='js/other_lib.js'></script> 

<script type="text/paperscript" canvas="canvas"> 
this.install(window); 
/*no code 'required' here */ 
</script> 
<body> 
    <canvas id="canvas" width="1500" height="500"></canvas> 
</body> 

然后在js/other_lib.js我只是添加代码为正常:

var r = new Path.Rectangle([100,100],[200,200]); 
r.fillColor = 'black'; 
/*more code here*/ 

这应该产生一个矩形。

什么对我不适用(截至Paper.js v0.10.2发布日期:2016年7月9日)是对象操作符。比如为我添加vecrots pointc = pointa + pointb;这给了很多NaN值。 我不得不修改的几个库得到这个工作,但变化很简单:

var pointc = new Point(pointa.x+pointb.x,pointa.y + pointb.y);

相关问题