gotoAndStop (); flashdevelop или flex - PullRequest
       4

gotoAndStop (); flashdevelop или flex

0 голосов
/ 16 февраля 2010

У меня есть собственный класс, который встраивает фрагмент ролика. Когда я пытаюсь использовать родительский класс, такой как gotoAndStop (). Это игнорирует метод. Я хотел бы знать, что я делаю неправильно. ниже мой код. Я вызываю метод в моем конструкторе. Спасибо!

класс игровых объектов

package com.objects 
{
    import com.eapi.IGameObject;
    import flash.display.MovieClip;
    /**
     * ...
     * @author Anthony Gordon
     */
    public class GameObject extends MovieClip implements IGameObject
    {


        public function GameObject() 
        {

        }

    }

}

класс героя. gotoAndStop () в конструкторе

package com.objects 
{
    import flash.display.MovieClip;
    import flash.events.*;
    /**
     * ...
     * @author Anthony Gordon
     */
    [Embed(source='../../../bin/Assets.swf', symbol='Hero')]
    public class Hero extends GameObject
    {   
        private var aKeyPress:Array;
        private var jumpDisabled:Boolean = false;

        public function Hero() 
        {
            gotoAndStop(1) ///<----------------Doesnt stop. Just keeps playing
            wY = 150;
            wX = 90;
            speed = .5;
            aKeyPress = new Array();
            TheGame.sr.addEventListener(KeyboardEvent.KEY_DOWN, keyDownListener);
            TheGame.sr.addEventListener(KeyboardEvent.KEY_UP,keyUpListener);
        }

        private function keyDownListener(e:KeyboardEvent):void {
            //trace("down e.keyCode=" + e.keyCode);         
            aKeyPress[e.keyCode]=true;
        }

        private function keyUpListener(e:KeyboardEvent):void {
            //trace("up e.keyCode=" + e.keyCode);
            aKeyPress[e.keyCode]=false;
        }

        override public function UpdateObject():void
        {
            Controls();
            updatePosition();
        }

        private function Controls():void
        {

            if (aKeyPress[38])//Key press up
                ;//dy -= speed;         
            else if (aKeyPress[40])//Key press down
                dy += speed;

            if (aKeyPress[37])//left
            {
                dx -= speed;
            }
            else if (aKeyPress[39])//Right
            {
                dx  += speed;
            }

            if (aKeyPress[32]){//space
                jump();
            }


        }//End Controls

        private function jump():void
        {
            if (!jumpDisabled)
            {
                if (onGround)
                {
                    gotoAndStop(10);
                    dy = -15;
                    jumpDisabled = true;
                }
            }
            else
            {
                jumpDisabled = false;               
            }
        }
    }

}

Ответы [ 4 ]

3 голосов
/ 21 октября 2011

Проблема в том, что когда вы вставляете SWF-фрагмент видеоклипа, на самом деле вы получаете мувиклип с добавленным дочерним загрузчиком, который попадает в настоящий мувиклип.

Вы должны попробовать что-то вроде

var aMovie:MovieClip;
Loader(this.getChildAt(0)).getLoaderInfo.addListener(Event.Complete, methodEventCompleteName);

function methodEventCompleteName(e:Event)
{
  aMovie = MovieClip(Loader(this.getChildAt(0)).content);
}

Я действительно предлагаю попробовать научиться использовать SWC-файлы. Я экспортирую его в IDE flash cs5, затем добавляю папку lib в мой проект, затем в flashdeveloper ide щелкаю правой кнопкой мыши в SWC-файле и выбираю опцию «добавить в библиотеку». Внутри класса можно напрямую создать экземпляр имени movieClip в файле SWC следующим образом:

var aMovie:MovieClip = new MyMovieClipFromSWC() as MovieClip;

и готово: D

Надеюсь, это кому-нибудь поможет ... потому что я потратил около 3 недель, пытаясь выяснить и, наконец, получить это ... не хватает информации об этом ...

1 голос
/ 16 февраля 2010

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

public function Hero() {
    if ( stage ) _init( );
    else addEventListener(Event.ADDED_TO_STAGE, _init );
}

private function _init( e:Event = null ):void {
    removeEventListener( Event.ADDED_TO_STAGE, _init );
    gotoAndStop(1) ///<----------------Doesnt stop. Just keeps playing
    wY = 150;
    wX = 90;
    speed = .5;
    aKeyPress = new Array();
    TheGame.sr.addEventListener(KeyboardEvent.KEY_DOWN, keyDownListener);
    TheGame.sr.addEventListener(KeyboardEvent.KEY_UP,keyUpListener);
}

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

0 голосов
/ 17 февраля 2010

Разберись. Я забыл, что мой MovieClip был инкапсулирован в другой мувиклип. Так что мне пришлось вызвать мувиклип, который был внутри символа Героя

0 голосов
/ 16 февраля 2010

Я заметил, что вы все еще используете

[Embed(source='../../../bin/Assets.swf', symbol='Hero')]

Поскольку вы используете flash-разработку (но то же самое относится и к flex), нет никаких причин, по которым вы не можете использовать SWC Хотя я не могу сказать со 100% уверенностью, что именно это и является причиной этой проблемы, как только вы начнете использовать SWC, это изменит мир. Вам не только больше не нужно будет использовать код для встраивания, лучше будут работать такие вещи, как gotoandplay и расширяющие классы, и вы сможете видеть классы и объекты внутри.

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

...