在Box2D中绘制自定义多边形
|
我正在制作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版本。
有什么建议么?我遗漏了明显的东西还是我(上帝禁止!)发现了一个错误?谢谢你的帮助!
安德烈
没有找到相关结果
已邀请:
2 个回复
目浆搽
请记住,每个点都必须在之前那个点的右边。
从左到右放置
我不太善于解释事物,但我希望能有所帮助! -零
痴浪墨