同一篇论文中的多个剧本/论文

时间:2012-12-26 10:51:47

标签: paperjs

我从paper.js开始。我喜欢这样一个事实:它引入了一个带有text / paperscript mime类型的脚本的可能性,该脚本在其范围内运行。但是,脚本很快就会变大,所以我希望能够将它分成多个脚本以便于阅读。我以为我可以添加多个脚本标记并让它们都在相同的范围内运行,但显然情况并非如此。

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

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

它包含两份论文:

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

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

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

如果我明确地使用纸质对象来引用我想要缩放的视图,那么它是有效的:

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

但是当我删除paper并引用视图时,它失败了:

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

这令我感到惊讶,正如我所预期的那样,脚本是Paperscript,在Paperscope中运行。如果我将此代码放在Maps.js中,它可以正常工作,所以看起来尽管zoom.js是由Paper.js加载的(浏览器中的开发人员工具确认了这一点),但它并没有在Paperscope中运行。

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

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

2 个答案:

答案 0 :(得分:1)

这确实是它的工作原理。我打开了issue on GitHub

答案 1 :(得分:0)

我发现&#34;最干净&#34;方法是用this.install(窗口)来做。它还可以更轻松地使用Chrome开发人员工具进行错误查找,因为它更适合报告java脚本中的行错误而不是&#34; paperscript&#34;。

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);