2012-05-27 70 views
1

我正在创建一个包含许多顶点的物体,以与场景中的另一个物体发生碰撞。这与b2ChainShape做,但我第一次尝试创建链的单个边缘(v2v是坐标转换方法):Box2D:边缘形状和链形状使用不同的顶点坐标

b2Vec2 v1 = [U v2v:CGPointMake(0, 150)]; 
b2Vec2 v2 = [U v2v:CGPointMake(50, 150)]; 

b2EdgeShape shape; 
shape.Set(v1, v2); 

这按预期工作:其他机构与该边缘碰撞。奇怪的是,当使用相同的顶点链形状时,没有碰撞:

b2Vec2 vertices[2]; 
vertices[0] = [U v2v:CGPointMake(0, 150)]; 
vertices[1] = [U v2v:CGPointMake(50, 150)]; 

b2ChainShape shape; 
shape.CreateChain(vertices, 2); 

任何想法为什么?链条是否使用一些不同的坐标系?

+0

这很奇怪。内部链形状只是管理一堆边缘形状,所以这里应该没有区别。你的代码中有没有其他地方可能是相关的? – iforce2d

回答

0

请阅读我从Box2d手册获取的以下段落。 http://www.box2d.org/manual.html

边缘形状是线段。提供这些是为了帮助您为游戏制作一个自由形式的静态环境 。 边缘形状的一个主要限制是它们可以与圆形和多边形相碰撞,但它们本身不会与 相碰撞。 Box2D使用的碰撞算法要求两个碰撞形状中至少有一个具有体积。边缘形状没有 体积,所以边缘碰撞是不可能的。