BabylonJS:碰撞检测

乔斯·格里特斯

我一直在努力解决这种碰撞反应,直到现在。我以为我会请你们提供一些指导。

http://jsbin.com/qoyuciti/1编辑链接:http : //jsbin.com/qoyuciti/1/edit?html(只是知道您不能在jsbin编辑模式下使用移动键(据我所知)知道))

这本JSBin显示了我目前所拥有的。我可以四处走动,当我撞到箱子时,我不会走过低谷,我会滑向箱子。有两个问题:

  1. 向左滑动,一切顺利,向右滑动,它开始“跳跃”;
  2. 有时在碰撞大约20秒后,球会穿过盒子。.我认为这可能与我正确滑行时遇到的“跳跃”有关系。

我的方法的快速解释

一旦我与盒子相交,用户便开始走动,我开始测试球体前方180度圆锥中的相交(用户前进的方向)。一旦找到一个空位,它将把玩家放在那里。

如果有人有更好的方法,请告诉我。当我解释我的代码时,这看起来可能会更高效,但请告诉我:)

提前致谢!

乔斯·格里特斯

我已经解决了我遇到的问题。这是任何需要它的人的代码:)

var intersect = box.intersectsPoint(player.position);
if (intersect) {
    var x = prevX,
        z = prevZ,
        slideSpeed = speed * 0.7;


    for (var angle = 0; angle > -90; angle -= 1) {

        x = prevX - Math.sin((direction - angle) * Math.PI / 180) * slideSpeed;
        z = prevZ - Math.cos((direction - angle) * Math.PI / 180) * slideSpeed;

        var intersect = box.intersectsPoint(new BABYLON.Vector3(x, player.position.y, z), true);
        if (!intersect) {
            break;
        }

        x = prevX - Math.sin((direction + angle) * Math.PI / 180) * slideSpeed;
        z = prevZ - Math.cos((direction + angle) * Math.PI / 180) * slideSpeed;

        var intersect = box.intersectsPoint(new BABYLON.Vector3(x, player.position.y, z), true);
        if (!intersect) {
            break;
        }

    }

    player.position.x = x;
    player.position.z = z;

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章