Actionscript 3 Actionscript 3相当于键盘事件。重复

Actionscript 3 Actionscript 3相当于键盘事件。重复,actionscript-3,flash,keyboard-events,adobe-animate,Actionscript 3,Flash,Keyboard Events,Adobe Animate,说到编程,我是个初学者;我正在Adobe Animator上为我的2D游戏课做一个flash游戏,我对代码有一个疑问,我的导师自己无法回答。长话短说,我想根据按键的时间增加角色的速度,所以我想到了这个: spdX = spdX + aclMov*(tempo) - aclFrc*(tempo); 只要按住键,可变节奏就会增加,我会用KeyboardEvent.repeat检查是否增加,如中所示: if(heldDown){while(heldDown){tempo += 1}} else{te

说到编程,我是个初学者;我正在Adobe Animator上为我的2D游戏课做一个flash游戏,我对代码有一个疑问,我的导师自己无法回答。长话短说,我想根据按键的时间增加角色的速度,所以我想到了这个:

spdX = spdX + aclMov*(tempo) - aclFrc*(tempo);
只要按住键,可变节奏就会增加,我会用KeyboardEvent.repeat检查是否增加,如中所示:

if(heldDown){while(heldDown){tempo += 1}}
else{tempo = 0}

spdX = spdX + aclMov*(tempo) - aclFrc*(tempo);
但是,当我尝试这样做时,输出响应为“在flash.events.KeyboardEvent上找不到属性repeat,并且没有默认值”。我假设这是因为我使用的媒体中没有定义KeyboardEvent.repeat。我是否可以复制KeyboardEvent.repeat的相同效果,或者通过创建一个函数来模仿它的功能

提前谢谢

(编辑1)

我开始为我的澄清不够,以及我对这个话题的无知道歉,因为我对as3还仅仅是一个初学者,而且还没有正确地介绍我读过的许多术语

因此,多亏了评论的有意义的贡献,我已经看到了我需要做什么样的工作来替代KeyboardEvent.repeat。守则中还有其他与问题相关的部分:

stage.addEventListener(KeyboardEvent.KEY_DOWN,pressKey)

function pressKey (Event){
(...)
if(Event.keyCode == (Keyboard.A)) {left = true;}
(...)
}

stage.addEventListener(KeyboardEvent.KEY_UP,releaseKey)

function releaseKey (Event){
(...)
if(Event.keyCode == (Keyboard.A)) {left = false;}
(...)
}
这就是代码的意图。有人建议我使用getTimer()方法记录事件向下键发生的时刻,并在向上键生效时停止。问题是,我如何增加代码使其区分这两个事件,更具体地说,我如何调整ENTER\u FRAME事件,以便区分这两个事件仍然有效?顺便说一下,以下是最相关的部分:

addEventListener(Event.ENTER_FRAME,walk);

function walk(Event) {
    if(left) { 
            (...)
            char.x -= spdX;
            (...)
            }
我假设代码一直工作到现在,因为“left”的状态不断地在“true”和“false”之间切换,因此反复满足if条件,导致角色移动。但是,如果我试图使条件依赖于“left”并在一段时间内保持“true”,那么代码就会与自身不兼容

简言之,它带来了一个问题,即在使用getTimer()方法时,如何调整“KEY_[]”事件侦听器和“walk”函数的工作方式,使其协同工作


再次,提前感谢。

我相信这是不言自明的

stage.addEventListener(KeyboardEvent.KEY_DOWN, onDown);
stage.addEventListener(KeyboardEvent.KEY_UP, onUp);
addEventListener(Event.ENTER_FRAME, onFrame);

var pressedKeyA:int;

// Never name variables and arguments with the same name
// as existing classes, however convenient that might seem.
function onDown(e:KeyboardEvent):void
{
    if (e.keyCode == Keyboard.A)
    {
        // Let's record the moment it was pressed.
        pressedKeyA = getTimer();
    }
}

function onUp(e:KeyboardEvent):void
{
    if (e.keyCode == Keyboard.A)
    {
        // Mark the key as not pressed.
        pressedKeyA = 0;
    }
}

function onFrame(e:Event):void
{
    // It is true if it is not 0.
    if (pressedKeyA)
    {
        // That's how long it has been pressed. In milliseconds.
        var pressedFor:int = getTimer() - pressedKeyA;

        // Change the position with regard to it.
        // For example 1 base + 1 per second.
        char.x -= 1 + pressedFor / 1000;
    }
}

大家好,欢迎来到StackOverflow。请花些时间阅读帮助部分。在这里提供更多的代码会很有帮助。您需要监听KeyboardEvent.KEY_DOWN,使用getTimer(…)方法记录发生这种情况的时间(从应用程序开始算起的毫秒),然后在Event.ENTER\u FRAME handler中重复执行您的操作,直到KeyboardEvent.KEY\u启动。您可能还需要阅读此内容来描述Flash应用程序例程循环:谢谢您的评论。我会尽快在文章中添加更多有意义的代码。@Organia首先,再次感谢您提供的信息。正如Nathan Thomas所建议的,我添加了更多的代码,以更好地阐明我的思维过程,并愿意接受改进建议。非常感谢!成功了!我只需要修改一下代码,但是非常感谢。