GameMaker 日本語掲示板

フィクスチャの設定方法 / 1

2 コメント
views
17 フォロー
1
生高橋 2024/06/24 (月) 09:16:36

Uses Physicsにチェックが入ってるとオブジェクト側で設定したfixtureがバインドされます。
そこから新たにコード上で用意したfixtureをバインドすると二つのfixtureがバインドされた状態になります。
fixtureは複数バインドすることが可能ですので現状だと複数のfixtureがバインドされている状態になっていると予想します。
どうしても、コード上で独自に用意したfixtureを用意する場合はUses Physicsのチェックを外し、物理変数を全部指定しないといけないっぽいです。
めんどくさいですが、次のようにするとよいかもしれません。

var fixture = physics_fixture_create();
physics_fixture_set_box_shape(fixture,32,32);
physics_fixture_set_density(fixture,0.5);
physics_fixture_set_restitution(fixture,0.5);
physics_fixture_set_collision_group(fixture,1);
physics_fixture_set_linear_damping(fixture,0.1);
physics_fixture_set_angular_damping(fixture,0.1);
physics_fixture_set_friction(fixture,0.2);
physics_fixture_bind(fixture,self);
physics_fixture_delete(fixture);

また、set_restitutionにはややこしいですが二つの関数があります。
・physics_fixture_set_restitution
・physics_set_restitution

physics_fixture_set_restitutionは上の例のように作成したfixtureのrestitutionを変更する関数です。
physics_set_restitutionはすでにバインドされたfixtureのrestitutionを変更する関数です。
physics_set_restitutionの使い方は次の通りです。

var fixture = physics_fixture_create();
physics_fixture_set_box_shape(fixture,16,16);
physics_fixture_set_density(fixture,0.5);
physics_fixture_set_restitution(fixture,0.5);
physics_fixture_set_collision_group(fixture,1);
physics_fixture_set_linear_damping(fixture,0.1);
physics_fixture_set_angular_damping(fixture,0.1);
physics_fixture_set_friction(fixture,0.2);
var bindFixture = physics_fixture_bind(fixture,self);
physics_fixture_delete(fixture);

physics_set_restitution(bindFixture,0.1)

physics_fixture_bindの戻り値を利用してバインドされたfixtureを取得し、そのfixtureのrestitutionを変更します。
バインド済みなので再バインドする必要がありません。

通報 ...