首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简单通用rayCasting在box2d Javascript实例中的应用

简单通用rayCasting在box2d Javascript实例中的应用
EN

Stack Overflow用户
提问于 2014-07-18 22:38:58
回答 1查看 1.1K关注 0票数 4

我一直在阅读关于rayCasting和Box2D的各种教程,但是我还没有看到任何明确的例子。我希望熟悉box2dweb的人能够给出一个清晰的例子,说明如何设置一个简单的函数,最终结果如下所示:

代码语言:javascript
复制
var myRayCastFunction = function(p1,p2,maxFraction){
    //Code here
}

这个想法是可以这样使用的:

代码语言:javascript
复制
var retVal = myRayCastFunction(p1,p2,maxFraction)
var fixture = retVal.fixture
var point = retVal.point
var normal = retVal.normal
var fraction = retVal.fraction

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

我一直在试图了解RayCasting如何在box2D中工作的所有细节,我理解这需要定制回调函数(我认为?),但我从来不知道这个函数需要放在哪里,以及应该放在什么位置。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-19 20:00:49

我开始回答这个问题是因为我碰巧要在我的当前项目中添加射线投射,我意识到在完成之前,box2dweb中实际上有一些bug需要修复。我将链接到详细信息,而不是混乱这篇文章:http://www.iforce2d.net/box2dweb-fixes.txt

以下是我如何成功地使用光线广播回调。声明回调类并给它一个ReportFixture函数:

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

现在,创建一个将其传递给worlds函数的实例:

代码语言:javascript
复制
var rayStart = ...;
var rayEnd = ...;

var callback = new RaycastCallback();

world.RayCast(callback, rayStart, rayEnd);
if ( callback.m_hit ) {
    ... use callback.m_point etc ...
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24834797

复制
相关文章

相似问题

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