Я очень запутался в следующей проблеме и был бы признателен за некоторую ясность.
В общем, как я работа включает создание всей моей графики во Flash Authoring, преобразовав их в символы Sprite, изменив базовый класс на flash.display.Sprite, присвоив моим экземплярам имена и, наконец, экспортируя их в ActionScript.
подход фактически позволяет мне динамически создавать свойства в коде на моих экземплярах Sprite, которые у меня есть экспортированы в ActionScript, как если бы они были экземплярами MovieClips. Я не совсем уверен, почему я могу это сделать, но могу. при опросе объектов, чтобы убедиться в их суперклассе, они действительно являются спрайтами, а не MovieClips.
однако, как и ожидалось, если я запрограммирую новый спрайт с нуля в коде и попытаюсь динамически добавить свойство к новому запрограммированному спрайту, это приведет к ошибке времени компиляции.
package
{
import flash.display.Sprite;
import flash.utils.getQualifiedSuperclassName;
public class Document extends Sprite
{
public function Document()
{
trace(getQualifiedSuperclassName(blueOvalInstance));
//flash.display::Sprite (it's not a MovieClip)
trace(blueOvalInstance.hasOwnProperty("currentFrame"));
//false (ok, ok, it's definately not a MovieClip)
blueOvalInstance.myNewProperty = true;
//dynamically added boolean property on a Sprite instance
trace(blueOvalInstance.hasOwnProperty("myNewProperty"));
//true. fancy that! my Flash Authoring exported Sprite has a dynamically added property
codeSprite();
}
private function codeSprite():void
{
var myCodedSprite:Sprite = new Sprite();
myCodedSprite.graphics.beginFill(0xFF0000);
myCodedSprite.graphics.drawRect(0, 0, 100, 100);
myCodedSprite.graphics.endFill();
addChild(myCodedSprite);
myCodedSprite.anotherNewProperty = true;
//dynamically added boolean property on a Sprite instance, just like before!
//Compile Time Error!!!
//1119: Access of possibly undefined property anotherNewProperty through a reference with static type flash.display:Sprite.
}
}
}
так почему я могу динамически добавлять свойства к экспортированным спрайтам в моем классе документа, если они не являются MovieClips, а я не могу, если сам создаю их в коде?
на следующем изображении показан новый символ BlueOval, экспортируемый в ActionScript из Flash Authoring с базовым классом Sprite (не MovieClip). обратите внимание на новый зеленый (вместо синего) значок «Видеоклип» на панели библиотеки.