javascript - 当另一个函数正在运行时如何取消一个函数
问题描述
我有一个小代码,当我使用 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
}
}
解决方案
您可以在按下键时增加和减少它们,而不是设置播放器方向。
向播放器类添加一个change_dir
方法,不要设置方向,而是更改它:(
我看不到播放器类,所以这是伪代码)
function change_dir(d) {
this.d += d;
}
在分别按下或释放keyReleased
时keyPressed
调用函数: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)
}
}
推荐阅读
- vba - 识别列、添加数量、删除重复项
- python - 如何使用 DRF 创建非常复杂的路线
- java - 尝试在 Android 中模糊图像的问题
- mysql - 为什么我将我的属性文件重写为具有相同内容的 yaml 文件,但是 spring 项目会引发错误?
- python - 汤对象中没有必需的项目-BeautifulSoup Python
- python - 将多个 csv 与“日期时间”列结合起来
- c++ - 不能在两个重叠的结构上使用初始化列表
- php - 未定义的属性:Cartalyst\Stripe\Stripe::$subscriptions
- java - Java eBay SDK - 无法初始化类 com.ebay.sdk.SdkAPIInterfaceServiceLocator
- react-native - 在useEffect中反应Native setState不触发重新渲染