我已经尝试解决一个平稳的玩家 - 墙 - 碰撞的问题,以便玩家沿着墙壁滑动。
我试过以下:
playerBox->move();
if (playerBox->intersects(wall)) {
clearMovement();
movePlayerBoxBack();
}
但如果玩家接触墙壁,他就不会滑动......他只是停下来。 (我也分别为W,A,S和D做。)
它只有在我将玩家位置设置回他正在触摸的墙壁位置时才有效。如下:
player->move();
if (intersect) {
moveToWall();
}
但它不起作用,因为对于一个墙,与另一个连接,玩家接触更多的边,玩家跳到角落......所以它只适用于一面墙......
我的问题是:如何以另一种方式制作平滑的玩家 - 墙壁 - 碰撞,这也适用于与一个或多个其他墙壁相连的墙壁。
你可以从玩家身上投射一条光线,看看它是否撞到墙上。如果碰撞,请使用墙壁的法线制作一个向量,该向量沿着玩家运行方向的一侧运行。