javascript - 碰撞后如何保持玩家位置?
问题描述
我在画布上制作游戏,我已经包含了一个库来为我处理碰撞。碰撞工作完美,但我不确定如何将玩家“冻结”到位并且在碰撞后不允许朝那个方向移动。谁能帮我吗 ?
我尝试了什么:
moveRight() {
this.pp.x = this.position.x;
this.position.x += 20;
}
moveLeft() {
this.pp.x = this.position.x;
this.position.x -= 20;
}
moveUp() {
this.pp.y = this.position.y;
this.position.y += 20;
}
moveDown() {
this.pp.y = this.position.y;
this.position.y -= 20;
}
我尝试跟踪“先前位置”并将其设置为碰撞时的位置,但它的行为非常奇怪,并没有真正起作用。
理想情况下,我想在我的玩家类中创建一个 stop() 函数,我会在玩家与世界碰撞时调用它。
非常感谢,非常感谢任何帮助!!!
我使用lib(https://github.com/RonenNess/SSCD.js/)为我做碰撞测试,代码如下:
export function collisionDetection(game) {
let world = new SSCD.World({ grid_size: 1024 });
let player = new SSCD.Rectangle(
new SSCD.Vector(game.player.position.x, game.player.position.y),
new SSCD.Vector(game.player.width, game.player.height)
);
let zombie = new SSCD.Rectangle(
new SSCD.Vector(game.zombie.position.x, game.zombie.position.y),
new SSCD.Vector(game.zombie.width, game.zombie.height)
);
let walls = game.walls;
walls.forEach(wall => {
world.add(
new SSCD.Rectangle(
new SSCD.Vector(wall.position.x, wall.position.y),
new SSCD.Vector(wall.width, wall.height)
)
);
});
if (world.test_collision(player)) {
game.player.speed = 0;
return
}
解决方案
做到这一点的一种方法是拥有20
你property
的班级。此属性将是一个 " speed
" 属性。然后您可以使用“ this.speed
”访问它。一旦检测到碰撞,将速度设置为0
,您将“冻结”您的角色。
例如 moveRight 会变成
moveRight() {
this.pp.x = this.position.x;
this.position.x += this.speed;
}
推荐阅读
- centos - F.conv2d 卡在我的 CentOS 上
- java - 我的应用无法安装在 Marshmallow 及以下版本的手机中
- r - bookdown中如何使用Rscript命令行工具建书
- apache-spark - 如何在谷歌云数据处理集群上同时使用 jupyter、pyspark 和 cassandra
- session - 如何用字符串扩展 session.Value
- sql - SQL:寻找舍入重复
- javascript - 获取动态创建元素(Javascript,DOM)的CSS宽度
- templates - 检查符号是 D 中的 [pointer to] 成员函数/字段
- java - 使用 livedata 压缩 4 个或更多异步调用
- ms-access - ms 访问如何运行减法而不是运行加法