在闪光灯中使用键盘(左右)移动

时间:2015-03-31 20:28:06

标签: actionscript-3 flash actionscript keyboard-events

我试图在我的游戏中左右移动我的头像以及停留在舞台的边界(700X500),我收到一条错误,指出“公共属性只能在包内使用”am我把公共职能放在了错误的位置?

   package
{
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.utils.Timer;
    import flash.events.TimerEvent;
    import flash.events.KeyboardEvent;
    import flash.ui.Keyboard;
    public class SpaceVigilanteGame extends MovieClip

    {
        public var enemy:Enemy;
        public var avatar:Avatar;
        public var gameTimer:Timer;
        public var useMouseControl:Boolean; 
        public var rightKeyIsBeingPressed:Boolean;
        public var leftKeyIsBeingPressed:Boolean; 
        var gameWidth:int = 0;
        var gameHeight:int = 0;

        public function SpaceVigilanteGame()
        {   useMouseControl = false;
            leftKeyIsBeingPressed = false;
            rightKeyIsBeingPressed = false;
            enemy = new Enemy();
            addChild( enemy );
            avatar = new Avatar();
            addChild( avatar );

            if ( useMouseControl )
            {
                avatar.x = mouseX;
                avatar.y = mouseY;
            }
            else
            {
                avatar.x = 50;
                avatar.y = 400;
            }

            gameWidth = stage.stageWidth;
            gameHeight = stage.stageHeight;


            gameTimer = new Timer( 25 );
            gameTimer.addEventListener( TimerEvent.TIMER, moveEnemy );
            gameTimer.addEventListener( TimerEvent.TIMER, moveAvatar );
            gameTimer.start();
            stage.addEventListener( KeyboardEvent.KEY_DOWN, onKeyPress );
            stage.addEventListener( KeyboardEvent.KEY_UP, onKeyRelease );

        public function onKeyPress( keyboardEvent:KeyboardEvent ):void
        {
            if ( keyboardEvent.keyCode == Keyboard.RIGHT )
            {
                rightKeyIsBeingPressed = true;
            }
        }
        public function onKeyRelease( keyboardEvent:KeyboardEvent ):void
        {
            if ( keyboardEvent.keyCode == Keyboard.RIGHT )
            {
                rightKeyIsBeingPressed = false;
            }
        }
        }
        public function moveEnemy( timerEvent:TimerEvent ):void 
        {
            //enemy.moveDownABit();
            if(enemy.x+enemy.width+2<=gameWidth)
                {
                    enemy.moveRight();
                }
            else if(enemy.y+enemy.height+2<=gameHeight)
                {
                    enemy.moveDown();
                }
            else if(enemy.x-2>=0)
                {
                    enemy.moveLeft();
                }
            else if(enemy.y-2>=0)
                {
                    enemy.moveUp();
                }

        }
        public function moveAvatar( timerEvent:TimerEvent ):void
        {
            if ( useMouseControl )
            {
                avatar.x = mouseX;
                avatar.y = mouseY;
            }
            else
            {
                if ( rightKeyIsBeingPressed )
                {
                    avatar.moveRight();
                }
            }
        }



    }
}

头像类:

package 
{
    import flash.display.MovieClip;
    public class Avatar extends MovieClip 
    {
        public function Avatar() 
        {
            x = 50;
            y = 400;

        }

        public function moveRight()
        {
            x = x + 2; 
        }

        public function moveLeft()
        {
            x = x - 2;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您的onKeyPress()构造函数中有两个onKeyRelease()public定义为SpaceVigilanteGame()的函数,这就是您遇到错误的原因,所以要避免这种情况,删除public或者,如果你想把它们公之于众,我不这么认为,把它们从你班级的构造函数中删除。

希望可以提供帮助。