Базовая версия Flash / AS3 Extended Sprite. Что мне не хватает? - PullRequest
0 голосов
/ 04 апреля 2011

Я в самом начале попыток изучить Actionscript 3. В настоящее время я работаю с FlashDevelop в качестве своей IDE. Хотя я могу кодировать на других языках, AS3 для меня очень нова (как и Flash).

Я создал базовый класс:

package 
{
    import flash.display.Sprite;

    public class BouncingBox extends Sprite
    {
        public function BouncingBox() 
        {
            x = 10;
            y = 10;
            width = 100;
            height = 100;
            graphics.clear();
            graphics.beginFill(0xD4D4D4); // grey color
            graphics.drawRoundRect(0, 0, 100, 100, 10, 10); // x, y, width, height, ellipseW, ellipseH
            graphics.endFill();
        }
    }
}

Затем из моего класса Main () я делаю:

package 
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.text.TextField;

    public class Main extends Sprite 
    {
        var mySprite:BouncingBox;

        public function Main():void 
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }

        private function init(e:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            // entry point
            mySprite = new BouncingBox();
            addChild(mySprite);         

            var t:TextField = new TextField();
            t.text = "Testing!";
            addChild(t);        
        }
    }
}

Я ожидал, что текст появится вверху (что происходит), а экземпляр BouncingBox появится на сцене на уровне 10, 10 (чего нет).

Что я упустил, чтобы этот спрайт появился на сцене?

Ответы [ 2 ]

1 голос
/ 04 апреля 2011

Это.

width = 100;
height = 100;

Вы устанавливаете его, когда спрайт пустой, и он испортил свою матрицу преобразования.Когда прямоугольник нарисован, он сам по себе даст этот размер.Установите ширину и высоту, если вы хотите увеличить ее позже.

0 голосов
/ 04 апреля 2011

Ваш объект на самом деле не инициализируется до тех пор, пока не будет добавлен в список отображения.Попробуйте добавить следующий код.

package 
{
    import flash.display.Sprite;

    public class BouncingBox extends Sprite
    {
    public function BouncingBox() 
    {
         if (stage) init();
        else addEventListener(Event.ADDED_TO_STAGE, init);
    }

    private function init(e:Event = null):void 
    {
        x = 10;
        y = 10;
        //width = 100;
        //height = 100;
        graphics.clear();
        graphics.beginFill(0xD4D4D4); // grey color
        graphics.drawRoundRect(0, 0, 100, 100, 10, 10); // x, y, width, height, ellipseW, ellipseH
        graphics.endFill();
    }
    }
}

Кроме того, вы можете прикрепить свой ящик, а затем инициализировать его положение и т. Д.

mySprite = new BouncingBox();
addChild(mySprite); 
mySprite.x = mySprite.y = 10;

Кроме того, рассмотрите, что @alxx написал в своемответить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...