ActionScript - динамическое добавление свойства в Sprite - PullRequest
1 голос
/ 25 сентября 2010

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

В общем, как я работаю, включает в себя проектирование всей моей графики в 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

Ответы [ 2 ]

1 голос
/ 26 сентября 2010

var myCodedSprite: Sprite = new Sprite (); myCodedSprite является объектом запечатанного класса, поэтому он не может добавлять свойства во время выполнения. Однако, когда вы расширяете этот класс, вы можете добавить пользовательские свойства в дочерний класс.

1 голос
/ 26 сентября 2010

Ваш класс должен быть определен как динамический класс для добавления свойств во время выполнения.

Проверить эту страницу: http://flexmusings.wordpress.com/2008/07/23/actionscript-3-dynamic-classes-part-2/

...