创建一个对象的多个实例(通过向其名称添加增量数字)并将 addChild 添加到舞台
Create multiple instances of an object (by adding incremental numbers to it's name) and addChild to stage
我正在使用 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 比较陌生,所以我的术语可能不太好。提前谢谢了。任何帮助将不胜感激!
是的,您可以使用 "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
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);
这使您可以轻松控制所需的副本数量,并且不会污染全局命名空间。
我正在使用 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 比较陌生,所以我的术语可能不太好。提前谢谢了。任何帮助将不胜感激!
是的,您可以使用 "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
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);
这使您可以轻松控制所需的副本数量,并且不会污染全局命名空间。