我正在使用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比较陌生,所以我的术语可能不太好。提前谢谢了。任何帮助将非常感激!
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);
这使您可以轻松控制所需的副本数量,并且不会污染全局命名空间。
是的,您可以使用“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