Вопрос:

AS3 ДВИЖУЩИЙСЯ ОБЪЕКТ НА КОНКРЕТНОМ КАДРЕ

actionscript-3 flash

99 просмотра

1 ответ

13 Репутация автора

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

так что я хочу сделать, это переместить объект (CHARA) вправо, когда я коснусь кадра 80 внутри (CHARA, который представляет собой вложенный мувиклип с 99 кадрами, кстати), а затем переместить его обратно в исходное положение, когда я нажму кадр 99 ... проблема в том, что я ничего не делаю, мой объект вообще не двигается (кстати, movieClip все еще проигрывался), что я здесь не так сделал? я просто поместил код в неправильную позицию ?? (CHAR перемещается, только если я поместил код x = прямо во фрейм 80, но я пытаюсь использовать здесь класс)

вот мой код, извините, я знаю, это грязно, мой первый код, я стараюсь изо всех сил здесь

package {

    public class Main extends MovieClip {

        public var CHARA:CHAR = new CHAR;//my main char
        public var rasen:Rasen_button = new Rasen_button;//the skill button
        public var NPCS:NPC = new NPC;// the npc

        public function Main() {
            var ally:Array = [265,296];//where me and my ally should be
            var jutsu:Array = [330,180];// where the buttons should be
            var enemy:Array = [450,294];//where the enemies should be

            addChild(NPCS);
            NPCS.x = enemy[0];
            NPCS.y = enemy[1];
            NPCS.scaleX *=  -1;

            addChild(rasen);
            rasen.x = jutsu[1];
            rasen.y = jutsu[0];

            addChild(CHARA);
            CHARA.x = ally[0];
            CHARA.y = ally[1];
            rasen.addEventListener(MouseEvent.CLICK, f2_MouseOverHandler);
            function f2_MouseOverHandler(event:MouseEvent):void {
                CHARA.gotoAndPlay(46); //here is the problem
                if (CHARA.frame == 80)
                {
                    CHARA.x = ally[1]; //just random possition for now
                }

            }
        }
    }
}

какие-либо предложения?

Автор: singgih .D. ACE Источник Размещён: 07.04.2017 09:03

Ответы (1)


3 плюса

22390 Репутация автора

Решение

Ваше ifутверждение находится внутри обработчика щелчка ( f2_MouseOverHandler), поэтому оно выполняется только тогда, когда пользователь щелкает rasen, а не обязательно, когда воспроизведение достигает кадра 80. Это распространенная ошибка новичка, связанная с синхронизацией и выполнением кода. Самое простое решение - написать код, который будет выполнять каждый кадр с использованием ENTER_FRAMEобработчика:

        rasen.addEventListener(MouseEvent.CLICK, f2_MouseOverHandler);
        function f2_MouseOverHandler(event:MouseEvent):void {
            CHARA.gotoAndPlay(46); //here is the problem

            // add an ENTER_FRAME handler to check every frame
            CHARA.addEventListener(Event.ENTER_FRAME, chara_EnterFrameHandler)
        }
        function chara_EnterFrameHandler(event:Event):void {
            if (CHARA.currentFrame == 80)
            {
                CHARA.x = ally[1]; //just random possition for now

                // remove the ENTER_FRAME after the condition is met
                // so it stops executing each frame
                CHARA.removeEventListener(Event.ENTER_FRAME, chara_EnterFrameHandler);
            }
        }
Автор: Aaron Beall Размещён: 07.04.2017 02:37
Вопросы из категории :
32x32