Iphone box2d光线投射向后兼容性问题

Iphone box2d光线投射向后兼容性问题,iphone,c++,box2d,Iphone,C++,Box2d,我最近在一个长期运行的项目中将box2d版本升级到v2.2.1,这导致了许多与现有项目代码的向后兼容性问题。除此之外,大多数问题都已解决 b2Fixture *f = body->GetFixtureList(); b2RayCastOutput output; b2RayCastInput input; f->RayCast(&output, input) // broken call 现在已断开,期待第三个参数。我在box2d源代码中看到函数签名是 inline boo

我最近在一个长期运行的项目中将box2d版本升级到v2.2.1,这导致了许多与现有项目代码的向后兼容性问题。除此之外,大多数问题都已解决

b2Fixture *f = body->GetFixtureList();
b2RayCastOutput output;
b2RayCastInput input;
f->RayCast(&output, input) // broken call
现在已断开,期待第三个参数。我在box2d源代码中看到函数签名是

inline bool b2Fixture::RayCast(b2RayCastOutput* output, const b2RayCastInput& input, int32 childIndex) const;
但是我找不到任何关于
childIndex
应该是什么的例子。有人能举例说明如何使用此更新的光线投射功能吗


编辑:我注意到将
childIndex
设置为0似乎有效,但我不知道为什么。

此参数仅与b2ChainShape装置相关。对于其他形状类型,它只是符合虚拟函数签名

链形状的功能实际上是由多个B2EdgeShape完成的,链形状本身可以被认为是组织这些边形状“子对象”的助手。它分配内存,为您设置重影顶点,并将冲突检查等任务委托给边形状

如果没有对链形状投射光线,可以将其保留为零。如果是,则可以使用b2ChainShape的以下功能对每个子边投射光线:

int32 GetChildCount() const;
void GetChildEdge(b2EdgeShape* edge, int32 index) const;
第二种用法如下:

b2EdgeShape edgeShape;
chainShape->GetChildEdge(&edgeShape, 123);
首先,您需要将形状强制转换为b2ChainShape*:

if ( e_chain == fixture->GetType() ) {
    b2ChainShape* chainShape = (b2ChainShape*)fixture->GetShape();
    ....
}

。。。使用b2World的RayCast功能会更简单、更高效:)

根据过去的经验,我有了一个大致的想法,并检查了来源以确认:查看我的网站以获取其他信息:www.iforce2d.net/b2dtut