Game Maker Language リファレンス > 組み込み関数 用途別 > 物理エンジン > physics_fixture_bind_ext()
フィクスチャを定義したら、インスタンスにバインドする必要があります。 つまり、そのプロパティは実際のフィクスチャ自体ではなく、選択したインスタンスに転送されるため、すべてが同じプロパティを持つ場合は、1つのフィクスチャを複数のインスタンスにバインドできます。 ターゲットのオブジェクトインデックスを指定すると、その時点で部屋に存在するすべてのインスタンスがそのフィクスチャプロパティを受け取ります(ただし、後で作成されるオブジェクトの新しいインスタンスは受け取りません)。または、特別なキーワード "other" と "all" を使用できます。 親オブジェクトを指定することもでき、その親を持つすべての子インスタンスもフィクスチャを受け取ります。 フィクスチャが必要なすべてのインスタンスにバインドされると、不要になった場合は削除でき、そのフィクスチャプロパティを持つインスタンスは影響を受けず、それらのプロパティを維持します。
通常、フィクスチャはインスタンスの原点に配置された重心でインスタンスにバインドされますが、これは必ずしも必要なものではないため、この関数を使用すると、フィクスチャがあるx位置とy位置をオフセットすることもできます。 指定された量でバインドされます(これが必要ない場合は、代わりに physics_fixture_bind() を使用してください)。 Box2Dでは単一のフィクスチャに複数のオフセットを追加することはサポートされていないため、フィクスチャは単一のオフセットしかサポートできないことに注意することが重要です。
この関数は、バインドされたフィクスチャ(フィクスチャ自体ではなく)の一意の「id」値も返します。この値を使用して、関数 physics_remove_fixture() を使用してインスタンスから物理プロパティを削除(「バインド解除」)できます。 これにより、オブジェクトを破棄および再作成することなく、インスタンスに物理プロパティを追加および削除できます。
physics_fixture_bind_ext(fixture, target, xoffset, yoffset)
var fix, inst;
fix = physics_fixture_create(); physics_fixture_set_circle_shape(fix, 16); physics_fixture_set_density(fix, 1.0); inst = instance_create_layer(x, y, "Instances", genericBodyObject); my_fix = physics_fixture_bind_ext(fix, inst, sprite_width / 2, -(sprite_height / 2)); physics_fixture_delete(fix);
上記のコードはフィクスチャを作成し、そのインデックスを変数「fix」に割り当てます。 次に、スプライトの幅と高さに基づいてオフセットでインスタンスにバインドする前に、フィクスチャの形状と密度を定義します。 バインドされたフィクスチャのインデックスは、変数「my_fix」に格納されます。 最後に、フィクスチャ自体が削除され、メモリリークが不要になったために防止されます。