AS3键盘控制
|
我有一个as3函数,可使用键盘控制影片剪辑:
包
{
import flash.display.MovieClip;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
import flash.events.Event;
public class Main_Character_Two extends MovieClip
{
var vx:int;
var vy:int;
public function Main_Character_Two()
{
init();
}
function init():void
{
//initialize variables
vx = 0;
vy = 0;
//Add event listeners
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp);
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
function onKeyDown(event:KeyboardEvent):void
{
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;
}
}
function onKeyUp(event:KeyboardEvent):void
{
if (event.keyCode == Keyboard.LEFT || event.keyCode == Keyboard.RIGHT)
{
vx = 0;
}
else if (event.keyCode == Keyboard.DOWN || event.keyCode == Keyboard.UP)
{
vy = 0;
}
}
function onEnterFrame(event:Event):void
{
//Move the player
player.x += vx;
player.y += vy;
}
}
}
可以,但是主要的问题是,当您按向右键(并按住不放)然后按向左键时,字符将向左移动,但是当您释放向左键时(仍然按住向右键)角色就停止了。我该如何做才能使角色在这种情况下再次开始向右移动(如果在Ive释放左键之后Im仍然按住右键)
谢谢
没有找到相关结果
已邀请:
4 个回复
殿虫
循环中,并使用
和
设置布尔值并将播放器定位在循环中,如下所示: var leftIsPressed:Boolean = false; var rightIsPressed:Boolean = false; var upIsPressed:Boolean = false; var downIsPressed:Boolean = false; var speed:Number = 5; var vx:Number = 0; var vy:Number = 0; stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler); stage.addEventListener(KeyboardEvent.KEY_UP,keyUpHandler); stage.addEventListener(Event.ENTER_FRAME,enterFrameHandler); 函数keyDownHandler(e:KeyboardEvent):void { 开关(e.keyCode){ case Keyboard.LEFT:leftIsPressed = true;打破; case Keyboard.RIGHT:rightIsPressed = true;打破; case Keyboard.UP:upIsPressed = true;打破; case Keyboard.DOWN:downIsPressed = true;打破; } } 函数keyUpHandler(e:KeyboardEvent):void { 开关(e.keyCode){ case Keyboard.LEFT:leftIsPressed = false;打破; case Keyboard.RIGHT:rightIsPressed = false;打破; case Keyboard.UP:upIsPressed = false;打破; case Keyboard.DOWN:downIsPressed = false;打破; } } 函数enterFrameHandler(e:Event):void { vx = -int(leftIsPressed)* speed + int(rightIsPressed)* speed; vy = -int(upIsPressed)* speed + int(downIsPressed)* speed; player.x + = vx; player.y + = vy; } [编辑]添加了更详细的示例。 当然,在这种情况下,如果同时按下左右键,将导致
偏移。
浩挎
来确定何时释放琴键,这样您就可以追踪哪些琴键被按住。
脾萌
事件,因此您的角色在您将手指从LEFT键上抬起后便会停止,因为没有新的
事件被触发会导致角色移动。 您可能可以通过添加一个ѭ3checks事件来完成操作,该事件检查事件触发时是否查看是否按住了其他箭头键,但是您可能需要将当前代码重构为避免重复自己。
公藕
如果找不到,就是这个方块。
该语句告诉您的程序,如果按下向右或向左键,则将速度设置为零。但是,由于Flash仅在您首次按下按键时才检查按键按下,因此按住某个按键不会触发onKeyDown函数。因此,如果同时按住左右两个不放,则将速度设置为零。 Corey在这里有一个合理的解决方案,还有其他一些原因,您可能想要使用切换的布尔值来检查键盘输入(主要原因是您不会得到任何重复延迟)。 我希望这个答案对您有所帮助-一点点知识就能带来美好的事物。祝好运。