我试图在平台游戏中给我的角色一个运动机制,其中按住左键然后右侧将导致角色仍然向左移动但速度较慢(即,运动速度/ 2),就像月亮一样 - 走路(反之亦然):
public var leftKey:Boolean = false;
public var rightKey:Boolean = false;
public var upKey:Boolean = false;
public var leftFlag:Boolean = false;
function ifKeyDown(event:KeyboardEvent):void
{
if (event.keyCode == Keyboard.LEFT && rightKey == false)
{
leftKey = true;
if (event.keyCode == Keyboard.LEFT && event.keyCode == Keyboard.RIGHT)
{
leftFlag = true;
trace("leftFlag true");
}
}
if (event.keyCode == Keyboard.RIGHT && leftKey == false)
{
rightKey = true;
}
}
function ifKeyUp(event:KeyboardEvent):void
{
if (event.keyCode == Keyboard.LEFT)
{
leftKey = false;
leftFlag = false;
}
if (event.keyCode == Keyboard.RIGHT)
{
rightKey = false;
}
}
public function ifEnterFrame(event:Event):void
{
if (leftKey == true && leftFlag == false)
{
player1_mc.x -= mainSpeed;
trace("L");
}
if (rightKey == true && leftFlag == false)
{
player1_mc.x += mainSpeed;
trace("R");
}
if (leftKey == true && rightKey == true)
{
if (leftFlag == true)
{
player1_mc.x -= mainSpeed/2;
trace("L + R");
}
else
{
player1_mc.x += mainSpeed/2;
trace("R + L");
}
}
我的输出看起来像这样: 我按住左键 大号 大号 大号 大号 我放开了左键。然后, 我拿着正确的钥匙 [R [R [R [R 我放开了正确的钥匙。然后, 我保持正确然后也保持左 大号 [R R + L 大号 [R R + L 我放开了两个。然后, 我先左,然后右边 大号 [R R + L 大号 [R R + L
虽然我通过我的踪迹知道leftFlag没有被运行,但我花了好几个小时试图弄清楚为什么无济于事。 :(
答案 0 :(得分:0)
我认为你的问题是这个表达式:
event.keyCode == Keyboard.LEFT && event.keyCode == Keyboard.RIGHT
虽然我不熟悉actionscript,但如果它类似于Java,则每次按键都会调用一次键盘事件。 “event”只对应一个键,而不是两个不同的键,因此你的表达式总是返回false。
解决问题的方法可能包括按键和释放按键功能。
if (event.keyCode == Keyboard.LEFT)
{
if (leftFlag)
{
//code here
}
if (rightFlag)
{
//code here
}
}
if (event.keyCode == Keyboard.RIGHT)
{
if (leftFlag)
{
//code here
}
if (rightFlag)
{
//code here
}
}
希望有所帮助!