创建对象的多个实例(通过向其名称添加增量数字)和addChild到stage

问题描述 投票:1回答:2

我正在使用Canvas / javascript(createjs),并且很难调用实例或将子项添加到克隆形状的阶段(通过使用for循环添加增量数字的数组)。

var myShape = new createjs.Shape();
myShape.graphics.f("white").rr(0, 0, 300, 300, 12);

myShape1 = myShape.clone();
myShape2 = myShape.clone();
myShape3 = myShape.clone();

//var arr = [null,cellFlasha1, cellFlasha2, cellFlasha3, cellFlasha4];

var arr = [];
for (var i = 1; i <= 4; i++) {
     arr.push(["myShape"+i]);
}

stage.addChild(arr[1]);

我似乎无法在舞台上添加和实例。当我使用已注释掉的数组时,它确实有效。当我将它作为对象推送到数组时,它是如何组合字符串和值的?

我知道我可以通过stage.addChild(myShape1)将它添加到舞台上;等等。但我想通过一个循环来实现,因为会有更多的实例和类似的场景(我打算循环我如何添加克隆,所以对象的数量可以只定义一次)

我对javascript比较陌生,所以我的术语可能不太好。提前谢谢了。任何帮助将非常感激!

javascript arrays canvas createjs easeljs
2个回答
2
投票

Muzaffar是正确的,您可以通过window对象访问这些变量,但它通常是依赖于全局变量的代码气味。您需要将任意数量的这些形状添加到数组中吗?如果是这样,为什么不尝试这样的事情呢?

function cloneShapeIntoArray(shape, num) {
  var shapeArray = [];

  for (var i = 0; i <= num; i++) {
    shapeArray.push(shape.clone());
  }

  return shapeArray;
}

function addShapesToStage(shapes, stage) {
  for (var i = 0; i <= shapes.length; i++) {
    stage.addChild(shapes[i]);
  }
}

var myShape = new createjs.Shape();
myShape.graphics.f("white").rr(0, 0, 300, 300, 12);

var shapes = cloneShapeIntoArray(myShape, 3);

// You can do some extra stuff to the shapes here, eg you could make each one a different scale
// shapes[0].scale = 1
// shapes[1].scale = 1.5
// shapes[2].scale = 2

addShapesToStage(shapes, stage);

这使您可以轻松控制所需的副本数量,并且不会污染全局命名空间。


0
投票

是的,您可以使用“window”全局对象执行此操作。像这样的东西

for(var i=1; i<=4; i++) {
    window['myShape'+i] =  myShape.clone();
}
var arr = [];
for (var i=1; i<= 4; i++) {
     arr.push(window['myShape'+i]);
}

有关详细信息,请参阅此处:Use dynamic variable names in JavaScript

© www.soinside.com 2019 - 2024. All rights reserved.