Javascript 碰撞后如何保持运动员的位置?

Javascript 碰撞后如何保持运动员的位置?,javascript,html,canvas,collision,Javascript,Html,Canvas,Collision,我在画布上做了一个游戏,我已经包括了一个库来处理我的碰撞。 碰撞是完美的工作,但我不确定如何“冻结”的球员在地方,不允许在该方向的运动后碰撞。有人能帮我吗 我尝试的是: moveRight(){ this.pp.x=this.position.x; 该位置x+=20; } 左移(){ this.pp.x=this.position.x; 这个位置x-=20; } 上移{ this.pp.y=this.position.y; 此.position.y+=20; } 向下移动(){ this.pp.

我在画布上做了一个游戏,我已经包括了一个库来处理我的碰撞。 碰撞是完美的工作,但我不确定如何“冻结”的球员在地方,不允许在该方向的运动后碰撞。有人能帮我吗

我尝试的是:

moveRight(){
this.pp.x=this.position.x;
该位置x+=20;
}
左移(){
this.pp.x=this.position.x;
这个位置x-=20;
}
上移{
this.pp.y=this.position.y;
此.position.y+=20;
}
向下移动(){
this.pp.y=this.position.y;
该位置y-=20;
}
我试着跟踪“前一个位置”,并在碰撞时将其设置为该位置,但它的行为非常奇怪,不起作用

理想情况下,我想在我的player类中创建一个stop()函数,调用与世界碰撞的player

非常感谢,非常感谢您的帮助

我使用lib(为我做碰撞测试,代码如下:

导出函数冲突检测(游戏){
let world=new SSCD.world({grid_size:1024});
让player=新的SSCD.矩形(
新的SSCD.Vector(game.player.position.x,game.player.position.y),
新的SSCD.Vector(game.player.width,game.player.height)
);
让zombie=新的SSCD.矩形(
新的SSCD.Vector(game.zombie.position.x,game.zombie.position.y),
新的SSCD.Vector(game.zombie.width,game.zombie.height)
);
让墙=游戏。墙;
墙。forEach(墙=>{
世界。添加(
新的SSCD矩形(
新的SSCD矢量(墙位置x,墙位置y),
新SSCD.矢量(墙.宽度,墙.高度)
)
);
});
if(世界测试碰撞(玩家)){
game.player.speed=0;
返回
}

一种方法是将
20
作为类的
属性
。此属性将是“
speed
”属性。然后,您可以使用“
This.speed
”访问它。一旦检测到碰撞,将速度设置为
0
,您将“冻结”角色

例如,moveRight将成为

moveRight() {
    this.pp.x = this.position.x;
    this.position.x += this.speed;
  }

一种方法是将
20
作为类的
属性
。此属性将是“
speed
”属性。然后,您可以使用“
This.speed
”访问它。一旦检测到碰撞,将速度设置为
0
,您将“冻结”角色

例如,moveRight将成为

moveRight() {
    this.pp.x = this.position.x;
    this.position.x += this.speed;
  }

低预算的方法是更新循环中的坐标(因此改为
x+=10
,执行
x++
10次),并在发生冲突时“撤消”更改,请参见最后的未命名函数(传递给
setInterval()
):

功能范围(l、x、h){

return l低预算方法是更新循环中的坐标(因此改为
x+=10
,执行
x++
10次),并在发生冲突时“撤消”更改,请参见最后的未命名函数(传递给
setInterval()
):

功能范围(l、x、h){

我刚试过,问题是我的角色被卡住了到墙。碰撞后,我无法向任何方向移动。要求是什么?我知道你希望角色在碰撞时不要移动?哦,对不起,我的错!我不希望角色穿过墙。是的,但通过将速度设置为0,它将保持为0,我无法再次移动。谢谢你的回答!刚刚尝试过,结果是问题是我的角色被“卡住”到墙。碰撞后,我无法向任何方向移动。要求是什么?我知道你希望角色在碰撞时不移动?哦,对不起,我的错!我不希望角色穿过墙。是的,但通过将速度设置为0,它将保持为0,我无法再次移动。谢谢回答!你应该显示碰撞检测代码(是否适用于矩形瓷砖、自由形式瓷砖、自由形式路径?)。显示方向控件是不够的,因为您想要的功能需要两者。这是一个第三方库,它使用矩形平铺!感谢您的回答,我已经包含了代码!您也应该显示碰撞检测代码(它是否适用于矩形平铺、自由形式平铺、自由形式路径?)。显示方向控件是不够的,因为您想要的功能需要两者。这是一个第三方库,它使用矩形瓷砖!谢谢您的回答,我已经包含了代码!