首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BabylonJS:碰撞检测

BabylonJS:碰撞检测
EN

Stack Overflow用户
提问于 2014-05-04 13:30:06
回答 2查看 1.8K关注 0票数 1

我一直在胡闹这种碰撞反应很久了。我想请你们指导一下。

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

这个JSBin展示了我目前所拥有的一切。我可以四处走动,当我撞到盒子的时候,我不会陷入低谷,我会滑翔在盒子里。有两个问题:

  1. 向左滑行,一切顺利,向右滑行,开始“跳跃”;
  2. 有时,在碰撞大约20秒后,球体会通过盒子.我认为这可能与我在滑行时所经历的“跳跃”有关。

--对我的方法的快速解释

用户开始行走,一旦我与盒子相交,我就开始测试球体前面180度的圆锥体中的相交点(用户正朝哪个方向)。一旦它找到一个空位,它就会把玩家放在那里。

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

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-05 19:15:34

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

代码语言:javascript
复制
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;

}
票数 2
EN

Stack Overflow用户

发布于 2014-05-05 15:33:51

您也许可以使用内部碰撞系统,但创建一个假的自由,并添加您的球体作为孩子的相机。然后,您可以使用键移动相机,并且自动地为您计算碰撞。

否则,还可以使用专用函数scene._getNewPosition直接使用碰撞引擎。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23456836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档