Zeichnung benutzerdefinierte Polygone in Box2D

Mache ich ein Flash-Spiel, und ich angetroffen habe ein echt komisches problem beim zeichnen eines Polygon-Form in Box2D.

Hier ist der code, den ich verwenden:

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);
}

Wo vertexArray ist ein gültiges array mit 4 b2Vec2 Eckpunkte, die eine konvexe Form.

Das problem ist, wenn ich testen, Kollisionen nicht richtig funktionieren, für diesen Körper. Die meisten anderen Objekte -Feinde, die Benutzer-gesteuerte Figuren - Durchlauf gerade durch, als wenn der Körper nicht da. Einige raycasts passieren, wie gut.

Empörend genug, eine Art der stellen, die ich habe (eine benutzerdefinierte Feind) irgendwie erkennt der Körper und kollidiert mit ihm. Die raycasts, die Besondere Art der Feind versucht tun Arbeit - wenn dein Charakter verbirgt sich hinter dem polygon, es ist wie Sie können ihn nicht sehen.

Die andere seltsame Sache: wenn ich versuche, den gleichen code, nur gehen für SetAsBox statt SetAsArray, es funktioniert genau so, wie es sollte.

Ich bin mit einem benutzerdefinierten ContactListener Klasse, aber ich habe nicht getan, alle Kontakt-Filterung (es sei denn, es ist möglich, das zu tun, ohne es zu bemerken).

Ich bin mit der Flash 9-version der Box2D 2.1.

Irgendwelche Vorschläge? Übersehe ich etwas offensichtliches oder habe ich (Gott bewahre!) haben Sie einen Fehler entdeckt? Vielen Dank für Ihre Hilfe!

Andrey

InformationsquelleAutor Andrey | 2011-04-14
Schreibe einen Kommentar