如何在paperjs的单个画布上使用多个papercope?

时间:2016-01-28 14:10:30

标签: canvas paperjs

我试图创建多个画布,每个画布都有自己的画面范围。但是,我遇到了一些在使用单个画布和范围时没有遇到的问题。

我有一系列范围并尝试使用scopeArray[n].activate();在它们之间进行切换但是这似乎没有启动paperScope.project,我无法分配图层或绘图。

非常感谢任何解决此问题的帮助。

我根据数组的大小设置画布并将它们存储在一个对象中:

paper.install(window);
...  
var paperPad = {};
var layers = {
    'BACK': 0,
    'DRAW': 1,
    'CONTROL': 2,
    'FRONT': 3
}

 function setupCanvas(){

// init canvas and calculate width/height/centre
for(var c in canvasList){

  var el = document.createElement("canvas");
  var id = '' + canvasList[c][0] + '' + canvasList[c][1] + '' + canvasList[c][2];

  el.width = canvasWidth;
  el.height = canvasHeight;
  el.setAttribute('id', id);
  el.setAttribute('class', 'padcanvas');
  document.body.appendChild(el);

  paperPad[id] = new paper.PaperScope();
  paperPad[id].setup(el);

}

然后我尝试通过访问全局项目来自动设置图层,但是我收到错误,说项目为null。

function setupLayers(){

for(var p in paperPad){

  paperPad[p].activate();
  project.layers[0].setName('BACK');

  for(var l in layers) {
    if(!project.layers[layers[l]]){
      var layer = new Layer();
      layer.setName(l);
    }
  }
}

}

在绘制函数中也是如此

function draw(){

for(var p in paperPad) {

  paperPad[p].activate();

  // draw functions
}

}

我确定我对于确定范围的方式缺少了一些东西。

1 个答案:

答案 0 :(得分:1)

即使您在纯JavaScript模式下通过project安装了纸质全局变量,

paperjs也不会更新全局变量paper.install(window)。如果您设置project = paperPad[id];它应该有效。我总是最终使用paper.project并手动更新它,因为我就是这样开始的,现在看来很自然。

但是,纸张无法管理在JavaScript模式下保持project最新。