Я знаю, что это старый поток, но недавно я пытался сделать что-то подобное, и нашел несколько обходных путей.
Как сказано здесь, невозможно создать несколько копий одного экземпляра., но возможно создать новый экземпляр на основе существующего экземпляра.Вы можете написать такую функцию:
public function getClass(obj:Object):Class {
return Object(obj).constructor;
}
... и затем реализовать ее следующим образом:
var seedImage:MovieClip = new SeedImageClass();
var classRef:Class = getClass(seedImage);
var copiedImage:MovieClip = new classRef();
seedImage.x = seedImage.y = 200;
copiedImage.x = copiedImage.y = 300;
stage.addChild(seedImage);
stage.addChild(copiedImage);
... где SeedImageClass будет названием вашей ссылки AS для вашей иллюстрацииво флеше.Если он не анимирован, вам лучше использовать Sprite вместо MovieClip.
Функция getClass () будет работать с любым классом, а не только с изображениями.
Для моих целей, хотяэто стало ненужным, так как я привык хранить любые «начальные изображения», которые я мог бы хотеть, в качестве переменной Class вместо MovieClips, а затем создавать новые копии из этого.
Вот упрощенный пример из игры IЯ работаю над:
public class SoldierType {
public var imageClass:Class;
public function SoldierType(artReference:Class) {
this.imageClass = artReference;
}
}
public class Soldier {
public var type:SoldierType;
public var image:MovieClip;
public function Soldier(typeReference:SoldierType, startX:Number, startY:Number) {
this.type = typeReference;
this.image = new this.type.imageClass(); //where the magic happens
this.image.x = startX;
this.image.y = startY;
}
}
.. и он реализован (более или менее) следующим образом, где art.BlueMarine - это связь AS с символом Flash.
var marineType:SoldierType = new SoldierType(art.BlueMarine);
var marine01:Soldier = new Soldier(marineType, 200, 200);
var marine02:Soldier = new Soldier(marineType, 300, 300);
stage.addChild(marine01.image);
stage.addChild(marine02.image);
смысл последней части в том, что вы можете реструктурировать свой код, чтобы порождать новые экземпляры из ссылки на класс вместо экземпляра MovieClip, что ускорит ваш код.Если нет, то функция getClass () может это сделать.
Удачи всем.