Пытаясь добавить события клавиатуры в дочерний мувиклип, я вызываю сцену в коде. - PullRequest
0 голосов
/ 01 октября 2018

Итак, это мой первый семестр в школьном коде, и сейчас я пытаюсь сделать небольшую 2D-игру с персонажем, который мне нужен, чтобы двигаться вверх и вниз.

До сих пор я смог создать экран заголовков, а затем, когда вы нажмете «Пуск», он перейдет к следующему экрану, где находится мой главный персонаж.

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

Это мой код до сих пор

package lib.fly 
{

    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.events.KeyboardEvent;
    import flash.ui.Keyboard;


    public class FlyGame extends MovieClip
    {

        public var mainCharacter:MovieClip;

        public var vx:Number;
        public var vy:Number;





            public function FlyGame()
                {


                    trace ("Initiate");
                    init();

                }

            private function init():void
                {
                    vx = 0;
                    vy = 0; 

                 addEventListener(Event.ENTER_FRAME, onEnterFrame);

                 stage.addEventListener(KeyboardEvent.KEY_DOWN, moveAround);    
                 stage.addEventListener(KeyboardEvent.KEY_UP, dontMove);

                  //var dx:Number = speed* Math.cos(angle);
                  //var dy:Number = speed* Math.sin(angle);

                    trace ("Keyboard Event Listeners");

                }


            private function moveAround(event:KeyboardEvent):void
                {
                    trace ("Actual Keyboard Events");

                    if (event.keyCode == Keyboard.LEFT)
                    {
                        vx = -5;
                    }
                    else if (event.keyCode == Keyboard.RIGHT)
                    {
                        vx = 5;
                    }
                    else if (event.keyCode == Keyboard.UP)
                    {
                        vy = - 5;
                    }
                    else if (event.keyCode == Keyboard.DOWN)
                    {
                        vy = 5;
                    }
                }

            private function dontMove(event:KeyboardEvent):void
                {
                    if (event.keyCode == Keyboard.LEFT || event.keyCode == Keyboard.RIGHT)
                    {
                        vx = 0;
                    }                   
                    else if (event.keyCode == Keyboard.UP || event.keyCode == Keyboard.DOWN)
                    {
                        vy = 0;
                    }

                }

            public function onEnterFrame(event:Event):void
                {
                    mainCharacter = new BoyFlying();
                    mainCharacter.x = 20;
                    mainCharacter.y = 150;

                    mainCharacter.x += vx;
                    mainCharacter.y += vy;

                    addChild(mainCharacter);

                }   
    }

}

Выходные данные генерируют операторы трассировки вплоть до моих "фактических событий клавиатуры"

Извините, я новичок в этомпоэтому любая помощь будет оценена.Спасибо за ваше время

1 Ответ

0 голосов
/ 02 октября 2018

Попробуйте эту логику ниже и посмотрите, поможет ли она вашей программе работать должным образом ...

Настройка функции init()

private function init():void
{
    vx = vy = 0; //chain them since same value

    mainCharacter = new BoyFlying(); //create once here and control in other functions
    mainCharacter.x = 20;
    mainCharacter.y = 150;

    mainCharacter.addEventListener(Event.ENTER_FRAME, onEnterFrame);
    addChild(mainCharacter);

    stage.addEventListener(KeyboardEvent.KEY_DOWN, moveAround);    
    //stage.addEventListener(KeyboardEvent.KEY_UP, dontMove); //what is it good for?

    trace ("added... Keyboard Event Listeners");

    //var dx:Number = speed* Math.cos(angle);
    //var dy:Number = speed* Math.sin(angle);

}

Настройка функции moveAround()

private function moveAround(event:KeyboardEvent):void
{
    trace ("Actual Keyboard Events");

    if (event.keyCode == Keyboard.LEFT) 
    { vx -= 5; }

    if (event.keyCode == Keyboard.RIGHT)
    { vx += 5; }

    if (event.keyCode == Keyboard.UP)
    { vy -= 5; }

    if (event.keyCode == Keyboard.DOWN)
    { vy += 5; }
}

Настройка функции onEnterFrame()

public function onEnterFrame(event:Event):void
{
    //# no need for += here since function moveAround() changes these vx and vy values on key press
    //# infact your character could be moved (x/y) just by keyboard event instead of per FPS screen update (eg: not with EnterFrame)

    mainCharacter.x = vx;
    mainCharacter.y = vy;

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