Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在另一个函数正在运行时取消该函数_Javascript_P5.js - Fatal编程技术网

Javascript 如何在另一个函数正在运行时取消该函数

Javascript 如何在另一个函数正在运行时取消该函数,javascript,p5.js,Javascript,P5.js,我有一个samll代码,当我使用keyPress和keyReleased功能按下left、right arrow或nothing时,有一个圆圈向左或向右移动或静止不动。它工作正常,但我想解决一个小问题,例如,当我按下right然后按下left,然后松开right 这将导致cricle静止不动,我认为这是因为释放功能是最后一个执行的功能,即使按键仍然处于活动状态(?只是猜测)。 我想知道是否有办法解决这个小问题 当前代码: function keyReleased() { if (keyCo

我有一个samll代码,当我使用keyPress和keyReleased功能按下left、right arrow或nothing时,有一个圆圈向左或向右移动或静止不动。它工作正常,但我想解决一个小问题,例如,当我按下right然后按下left,然后松开right

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

当前代码:

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

  }
}

您可以创建类似历史记录的currentState,并按下所有按钮。释放按键时停止。意思是空状态

让currentState=[];
常量删除=(arr,val)=>arr.filter((x)=>x!=val);
函数keyReleased(){
if(键代码===左箭头){
currentState=移除(currentState,左箭头);
}
如果(键代码===右箭头){
currentState=移除(currentState,右箭头);
}
如果(!currentState.length)players.stop();//将导致拖动圆来停止它
}
功能键按下(){
如果(键代码===右箭头){
players.dir(2);//将使圆圈向右移动
currentState.push(右箭头);
}else if(键代码===左箭头){
players.dir(-2);//将使圆圈向左移动
currentState.push(左箭头);
}

}
您可以创建类似于历史记录的当前状态,并按下所有按钮。释放按键时停止。意思是空状态

让currentState=[];
常量删除=(arr,val)=>arr.filter((x)=>x!=val);
函数keyReleased(){
if(键代码===左箭头){
currentState=移除(currentState,左箭头);
}
如果(键代码===右箭头){
currentState=移除(currentState,右箭头);
}
如果(!currentState.length)players.stop();//将导致拖动圆来停止它
}
功能键按下(){
如果(键代码===右箭头){
players.dir(2);//将使圆圈向右移动
currentState.push(右箭头);
}else if(键代码===左箭头){
players.dir(-2);//将使圆圈向左移动
currentState.push(左箭头);
}

}
也许一个while循环可以解决您的问题,这样您就可以将所有功能放在一个函数中。这样他们就不会互相抵消了。此外,使用switch语句可能会很有好处,特别是当您最终集成了向上箭头和向下箭头时

function movePlayer() {
    while(keyPressed) {
        switch(keyCode):
            case LEFT_ARROW:
                players.dir(-2);
            case RIGHT_ARROW:
                players.dir(2);
            default:
                players.stop()
    }
}

也许一个while循环可以解决您的问题,这样您就可以将所有功能放在一个函数中。这样他们就不会互相抵消了。此外,使用switch语句可能会很有好处,特别是当您最终集成了向上箭头和向下箭头时

function movePlayer() {
    while(keyPressed) {
        switch(keyCode):
            case LEFT_ARROW:
                players.dir(-2);
            case RIGHT_ARROW:
                players.dir(2);
            default:
                players.stop()
    }
}

您可以在按键时增加或减少播放方向,而不是设置播放方向

在玩家类中添加一个
change\u dir
方法,不要设置方向,但要更改:
(我看不到player类,所以这是伪代码)

分别按下左键或右键释放时,调用
键释放
键按下
中的功能:

函数keyReleased(){
如果(键代码===右箭头){
玩家。改变方向(-2)
}else if(键代码===左箭头){
玩家。改变方向(2)
}
}
功能键按下(){
如果(键代码===右箭头){
玩家。改变方向(2)
}else if(键代码===左箭头){
玩家。改变方向(-2)
}
}

当按下一个键时,您可以增加或减少播放方向,而不是设置播放方向

在玩家类中添加一个
change\u dir
方法,不要设置方向,但要更改:
(我看不到player类,所以这是伪代码)

分别按下左键或右键释放时,调用
键释放
键按下
中的功能:

函数keyReleased(){
如果(键代码===右箭头){
玩家。改变方向(-2)
}else if(键代码===左箭头){
玩家。改变方向(2)
}
}
功能键按下(){
如果(键代码===右箭头){
玩家。改变方向(2)
}else if(键代码===左箭头){
玩家。改变方向(-2)
}
}

disable/not react when one active.。能否在代码中添加一段代码片段,以便我们可以运行并帮助您调试程序?(请参阅此处了解更多详细信息:)禁用/不在激活时作出反应..能否在代码中添加一个代码段,以便我们可以运行并帮助您调试程序?(有关更多详细信息,请参见此处:)