Actionscript 3 在flash中使用键盘(左键和右键)移动
我试图在游戏中左右移动我的头像,并停留在舞台700X500的边界内,我收到一个错误,说明公共属性只能在包内使用。我是否将公共功能放置在错误的位置Actionscript 3 在flash中使用键盘(左键和右键)移动,actionscript-3,flash,actionscript,keyboard-events,Actionscript 3,Flash,Actionscript,Keyboard Events,我试图在游戏中左右移动我的头像,并停留在舞台700X500的边界内,我收到一个错误,说明公共属性只能在包内使用。我是否将公共功能放置在错误的位置 package { import flash.display.MovieClip; import flash.events.Event; import flash.utils.Timer; import flash.events.TimerEvent; import flash.events.Keyboar
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();
}
}
}
}
}
在SpaceVigiliteTgame构造函数中,有两个函数是定义为public的onKeyPress和onKeyRelease,这就是为什么会出现这个错误,所以为了避免这个错误,你必须删除public,或者,如果你想把它们作为public,我不这么认为,把它们从类的构造函数中删除
希望这能有所帮助。从“onKeyPress”和“onKeyRelease”中删除了“public”,但现在我有很多错误。第46行第42列1119:通过静态类型类的引用访问可能未定义的属性KEY_RIGHT。第47行第42列1119:通过静态类型类的引用访问可能未定义的属性KEY_。1061:通过静态类型Avatar的引用调用可能未定义的方法moveRight。@Leopold\u Stotch但没有KeyboardEvent.KEY\u RIGHT和KeyboardEvent.KEY\u LEFT事件,有KeyboardEvent.KEY\u DOWN和KeyboardEvent.KEY\u UP,然后你可以验证按下或释放的键是键盘。右键还是键盘。左键。只有上下两个事件?@Leopold_Stotch是的,就是这样,查看更多详细信息。
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;
}
}
}