我试图创建多个画布,每个画布都有自己的画面范围。但是,我遇到了一些在使用单个画布和范围时没有遇到的问题。
我有一系列范围并尝试使用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
}
}
我确定我对于确定范围的方式缺少了一些东西。
答案 0 :(得分:1)
project
安装了纸质全局变量, paperjs也不会更新全局变量paper.install(window)
。如果您设置project = paperPad[id];
它应该有效。我总是最终使用paper.project
并手动更新它,因为我就是这样开始的,现在看来很自然。
但是,纸张无法管理在JavaScript模式下保持project
最新。