ActionScript - Динамическое добавление свойств к спрайту

Я очень запутался в следующей проблеме и был бы признателен за некоторую ясность.

В общем, как я работа включает создание всей моей графики во 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). обратите внимание на новый зеленый (вместо синего) значок «Видеоклип» на панели библиотеки.

alt text

1
задан TheDarkIn1978 25 September 2010 в 15:35
поделиться