【问题标题】:How to make my keyboard command make the player play through the animation?如何让我的键盘命令让玩家通过动画播放?
【发布时间】:2013-10-07 14:44:23
【问题描述】:

我的键盘命令有问题,我试图让我的播放器播放动画 当他向左/向右走时。 键盘给出玩家移动和播放动画的命令。 问题是他不停地启动动画,并且不让它完成。

stage.addEventListener(KeyboardEvent.KEY_DOWN,keyPressed); stage.addEventListener(KeyboardEvent.KEY_UP,keyRelease);

function keyRelease(k:KeyboardEvent)
{
    movement = 0;
    gotoAndPlay("standing");
}

function keyPressed(k:KeyboardEvent)
{
    if(k.keyCode==Keyboard.D)
    {
    movement = 5;
    gotoAndPlay("walking");
    }
    if(k.keyCode==Keyboard.A)
    {
    movement = -5;  
    gotoAndPlay("walking");     
    }
}

我想我可以浏览所有代码并制作一些长长的 IF 列表...

但我想一定有更好的方法

【问题讨论】:

    标签: actionscript-3 flash animation keyboard-events


    【解决方案1】:

    当您向键盘添加事件时,一旦按下某个键,KeyboardEvent.KEY_DOWN 就会在没有释放的情况下持续调度。可能发生的情况是 gotoAndPlay("walking") 不断被调用,因此总是重新启动动画。

    您需要一种方法来检查动画的状态并避免在序列已经播放时重新开始。比如:

    function keyRelease(k:KeyboardEvent)
    {
        movement = 0;
        gotoAndPlay("standing");
    }
    
    function keyPressed(k:KeyboardEvent)
    {
        if(k.keyCode==Keyboard.D && movement != 5)
        {
            movement = 5;
            gotoAndPlay("walking");
        }
        if(k.keyCode==Keyboard.A && movement != -5)
        {
            movement = -5;  
            gotoAndPlay("walking");     
        }
    }
    

    这不是我推荐的完全方式(根据当前移动速度确定动画状态),但它是一个简单的解决方案,应该可以解决这个问题。

    【讨论】:

    • 哦,谢谢!!!当我得到你的回复时,我做了一些比你描述的更好的事情,但我用计时器做到了,这让 a** 感到非常痛苦!你的方式似乎更好我会立即检查它,但有没有办法让键盘按下只发送一次代码行?如果我没有这种选择,我已经想象未来会有很多问题......
    • 并非如此。键盘事件试图模仿键盘按键的工作方式——如果你按下它一次,它会派发一个键,等待几毫秒,然后开始不断地派发那个按键。这是意料之中的。避免它的最佳方法是为按键设置“状态”(例如 isMovingLeft、isMovingRight),并且按键按下/释放仅在状态不同时更改状态。可能有点尴尬,但效果很好。
    • 附带说明,某些第三方游戏/按键输入类也使您更容易抽象它,您可以只检查是否有 isPressed() 而不是监听向下/向上事件。或者,您可以构建自己的类,通过在调度事件之前不断检查键的状态来隐藏重复向下/向上的功能。
    • 嗯...有没有什么资料可以让我更好地了解这一点?我可能会尝试一些事情并弄清楚,但我无法避免使用计时器......我的意思是,如果我说if(keydown){isPressed},那么他只会在每一帧发送相同的函数,再次感谢你很有帮助!
    • 我不确定你用它做什么,但我肯定避免使用计时器。除非它们用于长期(1 秒以上)的东西,否则它们确实不精确并且是资源消耗。你是对的,如果isKeyPressed(whatever) 是玩家移动动画的问题,它会强制检查状态,这样它就不会再次启动动画。您可能需要一些布尔变量(例如isWalkingLeft)。但在其他情况下它仍然有帮助。本教程似乎对在游戏中使用键盘状态有很好的介绍:newgrounds.com/bbs/topic/1299072
    猜你喜欢
    • 1970-01-01
    • 2021-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    • 2017-09-11
    相关资源
    最近更新 更多