Javascript 如何在另一个函数正在运行时取消该函数
我有一个samll代码,当我使用keyPress和keyReleased功能按下left、right arrow或nothing时,有一个圆圈向左或向右移动或静止不动。它工作正常,但我想解决一个小问题,例如,当我按下right然后按下left,然后松开right 这将导致cricle静止不动,我认为这是因为释放功能是最后一个执行的功能,即使按键仍然处于活动状态(?只是猜测)。 我想知道是否有办法解决这个小问题 当前代码:Javascript 如何在另一个函数正在运行时取消该函数,javascript,p5.js,Javascript,P5.js,我有一个samll代码,当我使用keyPress和keyReleased功能按下left、right arrow或nothing时,有一个圆圈向左或向右移动或静止不动。它工作正常,但我想解决一个小问题,例如,当我按下right然后按下left,然后松开right 这将导致cricle静止不动,我认为这是因为释放功能是最后一个执行的功能,即使按键仍然处于活动状态(?只是猜测)。 我想知道是否有办法解决这个小问题 当前代码: function keyReleased() { if (keyCo
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.。能否在代码中添加一段代码片段,以便我们可以运行并帮助您调试程序?(请参阅此处了解更多详细信息:)禁用/不在激活时作出反应..能否在代码中添加一个代码段,以便我们可以运行并帮助您调试程序?(有关更多详细信息,请参见此处:)