我正在制作一个 Flash 游戏,在尝试在 Box2D 中绘制多边形时遇到了一个非常奇怪的问题。
这是我使用的代码:
var fixtureDefs:Array = new Array();
...
var fDef:b2FixtureDef = new b2FixtureDef();
fDef.density = 0;
fDef.shape = new b2PolygonShape();
b2PolygonShape(fDef.shape).SetAsArray(vertexArray);
fixtureDefs.push(fDef);
//This gets repeated several times, so that at the end you get a body consisting of several convex shapes.
...
var bD:b2BodyDef = new b2BodyDef();
bD.type = b2Body.b2_staticBody;
bD.position.Set(300/Constants.RATIO,200/Constants.RATIO);
var body:b2Body = Constants.world.CreateBody(bD);
...
for each(var fD:b2FixtureDef in fixtureDefs) {
body.CreateFixture(fD);
}
其中 vertexArray 是包含 4 个 b2Vec2 顶点的有效数组,构成一个凸形。
问题是,当我测试时,碰撞不适用于那个身体。大多数其他物体 - 敌人,用户控制的角色 - 直接穿过,就好像身体根本不存在一样。一些光线投射也会通过。
令人气愤的是,我拥有的一种身体(一个自定义敌人)以某种方式确实检测到了身体并与之发生了碰撞。特定类型的敌人尝试的光线投射确实有效 - 当您的角色隐藏在多边形后面时,就像他们看不到他一样。
另一件奇怪的事情:当我尝试相同的代码时,只使用 SetAsBox 而不是 SetAsArray,它完全可以正常工作。
我正在使用自定义的 ContactListener 类,但我没有进行任何联系人过滤(除非可以在没有意识到的情况下这样做)。
我正在使用 Box2D 2.1a 的 Flash 9 版本。
有什么建议么?我错过了一些明显的东西还是我(上帝保佑!)发现了一个错误?谢谢你的帮助!
安德烈