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頂点を含む有効な配列であり、凸形状を構成します。
問題は、私がテストしたときに、衝突がそのボディに対して正しく機能しないことです。他のほとんどのオブジェクト(敵、ユーザー制御のキャラクター)は、体がまったくないかのようにまっすぐ通過します。一部のレイキャストも通過します。
腹立たしいことに、私が持っているある種の体(カスタムの敵)は、どういうわけか体を検出して衝突します。特定の種類の敵が試みるレイキャストは機能します-キャラクターがポリゴンの後ろに隠れているとき、彼らは彼を見ることができないようです。
もう1つの奇妙なことは、同じコードを試してみると、SetAsArrayではなくSetAsBoxのみを使用すると、正常に機能することです。
カスタムのContactListenerクラスを使用していますが、連絡先のフィルタリングを行っていません(気付かないうちに行うことができない場合)。
Box2D2.1aのFlash9バージョンを使用しています。
助言がありますか?私は明らかな何かを見逃していますか、それとも私(神は禁じられています!)がバグを発見しましたか?ご協力いただきありがとうございます!
アンドレイ