Создайте несколько экземпляров объекта (добавив инкрементные числа к его имени) и добавьте addChild в stage - PullRequest
0 голосов
/ 01 марта 2019

Я использую 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, поэтому моя терминология может быть не очень хорошей.Спасибо заранее.Любая помощь будет высоко ценится!

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

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 голосов
/ 01 марта 2019

Да, вы можете сделать это с «оконным» глобальным объектом.Примерно так:

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]);
}

Более подробно вы можете посмотреть здесь: Использовать имена динамических переменных в JavaScript

...