Странные проблемы в FlashDevelop - PullRequest
0 голосов
/ 31 августа 2011

У меня есть некоторые проблемы в игре, которую я создаю в Action Script 3. Я делаю это со знанием каждого учебника, который я когда-либо читал, используя FlashDevelop. Однако в этом коде я обнаружил несколько ошибок, которые мешают мне компилировать. Вот только два файла AS, которые у него есть:

Main.as

package 
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.TimerEvent;
    import flash.utils.Timer;
    import flash.events.KeyboardEvent;
    import flash.ui.Keyboard;

    public class Main extends Sprite 
    {
        public var gameTimer:Timer

        public var LeftisPressed:Boolean;
        public var RightisPressed:Boolean;

        public var jumper = new Jumper;

        public function Main()
        {
            gameTimer = new Timer( 40 )
            gameTimer.addEventListener(TimerEvent.TIMER, onTick);

            RightisPressed = false;
            LeftisPressed = false;

            addEventListener( Event.ADDED_TO_STAGE, OnAddToStage() );

            jumper = new Jumper();
            addChild( jumper );
        }
        public function OnAddtoStage() :void
        {
            stage.addEventListener( KeyboardEvent.KEY_DOWN, onKeyPress );
            stage.addEventListener( KeyboardEvent.KEY_UP, onKeyRelease );
        }
        public function onTick (timerEvent: TimerEvent) :void
        {
            if (LeftisPressed)
            {
                jumper.Left();
            }

            if (RightisPressed)
            {
                jumper.Right();
            }
        }
        public function onKeyPress (keyboardEvent: KeyboardEvent) :void
        {
            if (KeyboardEvent.keyCode == Keyboard.LEFT )
            {
                LeftisPressed = true;
            }
            if (KeyboardEvent.keyCode == Keyboard.RIGHT )
            {
                RightisPressed = true;
            }
        }
        public function onKeyRelease(keyboardEvent: KeyboardEvent) :void
        {
            if (KeyboardEvent.keyCode == Keyboard.LEFT )
            {
                LeftisPressed = false;
            }
            if (KeyboardEvent.keyCode == Keyboard.RIGHT )
            {
                LeftisPressed = false;
            }
        }

    }
}

Jumper.as

package 
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.TimerEvent;
    import flash.utils.Timer;
    import flash.events.KeyboardEvent;
    import flash.ui.Keyboard;
    /**
     * ...
     * @author Timothy Bumpus
     */
    public class Jumper extends Sprite 
    {
        public function Jumper()
        {
            var square:Sprite = new Sprite();
            addChild(square);
            square.graphics.lineStyle(3,0x00ff00);
            square.graphics.beginFill(0x0000FF);
            square.graphics.drawRect(0,0,100,100);
            square.graphics.endFill();
            square.x = 250
            square.y = 350
        }
        public function Left()
        {
            x = x - 3
        }
        public function Right()
        {
            x = x + 3
        }
    }

}

(Если это важно для вас, это называется перемычка, потому что я в итоге заставлю его прыгнуть.)

Идея состоит в том, чтобы заставить спрайт двигаться влево и вправо к соответствующим клавишам. Но когда я пытаюсь отладить его, он выдает мне 5 ошибок: «col: 44 Error: вызов возможно неопределенного метода OnAddToStage». и «col: 22 Error: доступ к возможно неопределенному свойству keyCode через ссылку со статическим типом Class». за каждый раз я упоминаю keyCode. После поиска в интернете я могу только сделать вывод, что он как-то связан с Flex SDK, который использует FlashDevelop, но я не могу найти какую-либо конкретную справку об ошибке в этом контексте.

Я не могу быть единственным человеком, у которого была эта проблема. Есть идеи?

Ответы [ 2 ]

1 голос
/ 31 августа 2011

Сообщения об ошибках довольно наглядны.

Первый жалуется на эту строку:

 addEventListener( Event.ADDED_TO_STAGE, OnAddToStage() );

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

 addEventListener( Event.ADDED_TO_STAGE, OnAddToStage );

addEventListener ожидает метод, поэтому, если OnAddToStage не вернет метод (в данном случае это не так), при его вызове возникает ошибка, а не передается.

Вторая ошибка связана с тем, что вы используете KeyboardEvent.keyCode (KeyboardEvent - это класс) вместо keyboardEvent.keyCode (ваша переменная).

Эти проблемы не имеют ничего общего с FlashDevelop.

1 голос
/ 31 августа 2011

В этой строке в конструкторе вы совершаете типичную ошибку новичка ActionScript:

addEventListener( Event.ADDED_TO_STAGE, OnAddToStage() );

Вы передаете результат функции OnAddToStage в addEventListener, в данном случаеэто void, так что вы ничего не передаете.То, что вы хотите сделать, это передать действительную функцию следующим образом:

// note the missing paranthesis
addEventListener( Event.ADDED_TO_STAGE, OnAddToStage );

В вашем обработчике ключей вы делаете аналогичную ошибку, KeyboardEvent - это класс, keyboardEvent (со строчной буквой k) - этофактический экземпляр события, поэтому поменяйте его местами следующим образом:

if (keyboardEvent.keyCode == Keyboard.LEFT )
{
    LeftisPressed = true;
}

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

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

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