我最近在一个长期运行的项目中将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
应该是什么的任何示例。有人可以提供如何使用此更新的RayCast函数的示例吗?编辑:我注意到将
childIndex
设置为0似乎可行,但我不知道为什么。 最佳答案
此参数仅与b2ChainShape灯具有关。对于其他形状类型,它只是在那里符合虚拟功能签名。
链形状的功能实际上是由多个b2EdgeShapes完成的,并且链形状本身可以看作是组织这些边缘形状“子级”的辅助工具。它分配内存,为您设置重影顶点,并将诸如碰撞检查之类的事情委托(delegate)给边缘形状。
如果您不针对链形投射光线,则可以将其保留为零。如果是这样,可以使用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函数将更容易,更高效:)
关于iphone - box2d raycast向后兼容性问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11385100/