首页 > 解决方案 > 当另一个函数正在运行时如何取消一个函数

问题描述

我有一个小代码,当我使用 keyPress 和 keyReleased 功能按左、右箭头或什么都不按时,我有一个圆圈向左或向右或静止不动。它工作正常,但我想解决一个小问题,例如我按下Right然后Left然后释放Right

这将导致 cricle 静止不动,我认为这是因为即使 keyPressed 仍然处于活动状态(?只是猜测),释放功能是最后一个执行的功能。我想知道是否有办法解决这个小问题?

当前代码:

function keyReleased() {

  if (keyCode === RIGHT_ARROW || keyCode === LEFT_ARROW) {
    players.stop() // Will cause drag on the circle to stop it

  }
}

function keyPressed() {

  if (keyCode === RIGHT_ARROW) {
    players.dir(2)  // Will cause the circle to move right 

  } else if (keyCode === LEFT_ARROW) {
    players.dir(-2) // Will cause the circle to move left

  }
}

标签: javascriptp5.js

解决方案


您可以在按下键时增加和减少它们,而不是设置播放器方向。

向播放器类添加一个change_dir方法,不要设置方向,而是更改它:(
我看不到播放器类,所以这是伪代码)

function change_dir(d) {
    this.d += d;
}

在分别按下或释放keyReleasedkeyPressed调用函数:leftright

function keyReleased() {

    if (keyCode === RIGHT_ARROW) {
        players.change_dir(-2)
    } else if (keyCode === LEFT_ARROW) {
        players.change_dir(2)
    }
}

function keyPressed() {

    if (keyCode === RIGHT_ARROW) {
        players.change_dir(2)
    } else if (keyCode === LEFT_ARROW) {
        players.change_dir(-2)
    }
}

推荐阅读