按顺序特定的键组合功能?

时间:2012-06-25 08:27:05

标签: actionscript-3

我试图在平台游戏中给我的角色一个运动机制,其中按住左键然后右侧将导致角色仍然向左移动但速度较慢(即,运动速度/ 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没有被运行,但我花了好几个小时试图弄清楚为什么无济于事。 :(

1 个答案:

答案 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
    }
}

希望有所帮助!