我一直在浏览有关使用 Box2D 进行 rayCasting 的各种教程,但没有看到任何明确的示例。我希望熟悉 box2dweb 的人能够给出一个清晰的例子,说明如何设置一个最终看起来像这样的简单函数:

var myRayCastFunction = function(p1,p2,maxFraction){
    //Code here
}

这个想法是它可以像这样使用:
var retVal = myRayCastFunction(p1,p2,maxFraction)
var fixture = retVal.fixture
var point = retVal.point
var normal = retVal.normal
var fraction = retVal.fraction

(在这种情况下,我只是返回 1 个交叉点,比如最近的一个,但想知道如何制作一个类似的交叉点,其中 retVel 是每个交叉点的这些输出的列表)

我一直试图了解 RayCasting 在 box2D 中如何工作的所有细节,并且我明白这需要创建一个自定义回调函数(我认为?),但我从来没有想过需要放置该函数的位置,以及什么IT 也应该如此。

最佳答案

我开始回答这个问题是因为我碰巧要在我当前的项目中添加光线转换,我意识到 box2dweb 中实际上有一些错误需要修复才能完成。我将链接到详细信息,而不是把这篇文章弄得乱七八糟:
http://www.iforce2d.net/box2dweb-fixes.txt

这是我成功使用光线转换回调的方法。声明你的回调类并给它一个 ReportFixture 函数:

var RaycastCallback = function() {
    this.m_hit = false;
}
RaycastCallback.prototype.ReportFixture = function(fixture,point,normal,fraction) {

    if ( ... not interested in this fixture ... )
        return -1;

    this.m_hit = true;
    this.m_point = point;
    this.m_normal = normal;
    return fraction;
};

现在创建一个实例以传递给世界的 RayCast 函数:
var rayStart = ...;
var rayEnd = ...;

var callback = new RaycastCallback();

world.RayCast(callback, rayStart, rayEnd);
if ( callback.m_hit ) {
    ... use callback.m_point etc ...
}

关于javascript - box2d Javascript 示例中的简单通用 rayCasting,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24834797/

10-10 17:14