私は自分の問題について十分に明確ではなかったと思うので、この質問を完全に修正しなければなりませんでした。
Box2D Web のコツを学ぼうとしています。複数のシェイプを 1 つのリジッド ボディに配置する方法を学びたいと思ったとき (応答性の高い凹型ボディを形成するため)、問題が発生し始めました。私が行った仮定の 1 つは、この種の機能は、形状の位置を変更できる場合にのみ実際に役立つというものでした (これにより、剛体全体がどのように見えるかを制御できます)。例として、2 つの長方形の形状を持つ「L」ボディを作成し、そのうちの 1 つを最初の形状の右下に配置します。
これまでのところ、3 番目の引数 (中央) でボックスの位置を渡すことができる SetAsOrientedBox メソッドを見つけました。
すべて順調です。しかし、1 つの剛体で 2 つの円形状を作成しようとすると、望ましくない動作が見つかりました。私の本能は SetLocalPosition メソッド (b2CircleShape クラスにあります) を使用することでした。これはある程度機能するようです。デバッグ描画では、ボディは物理的には本来の反応を示しますが、視覚的に (デバッグ内で) 形状をその位置に描画していないように見えます。中心位置に円を描くだけです。これはおそらく Box2D のデバッグ ドロー ロジックの問題であることは承知していますが、この問題に関するオンライン パターンがないのは奇妙に思えます。体の座標空間の異なる位置に 2 つの円形状を作成することは、よく知られており、十分に文書化された現象であると考える人もいるでしょう。明らかに違います。
以下は、ボディを作成するために使用しているコードです。ワールドがこのスコープに効果的に渡されたと仮定します。
// first circle shape and def
var fix_def1 = new b2FixtureDef;
fix_def1.density = 1.0;
fix_def1.friction = 0.5;
fix_def1.restitution = .65;
fix_def1.bullet = false;
var shape1 = new b2CircleShape();
fix_def1.shape = shape1;
fix_def1.shape.SetLocalPosition(new b2Vec2(-.5, -.5));
fix_def1.shape.SetRadius(.3);
// second circle def and shape
var fix_def2 = new b2FixtureDef;
fix_def2.density = 1.0;
fix_def2.friction = 0.5;
fix_def2.restitution = .65;
fix_def2.bullet = false;
var shape2 = new b2CircleShape();
fix_def2.shape = shape2;
fix_def2.shape.SetLocalPosition(new b2Vec2(.5, .5));
fix_def2.shape.SetRadius(.3);
// creating the body
var body_def = new b2BodyDef();
body_def.type = b2Body.b2_dynamicBody;
body_def.position.Set(5, 1);
var b = world.CreateBody( body_def );
b.CreateFixture(fix_def1);
b.CreateFixture(fix_def2);
HTML5 キャンバスでBox2D Web ( http://code.google.com/p/box2dweb/ ) を使用していることに注意してください。