obj_ballとobj_boxにそれぞれに違う反発係数を与え、マウスをクリックするとroomに生成される、というコードを描きたかったのですが、反発係数を与えられません。具体例は、obj_ball内の作成イベントのphysics_fixture_set_restitution(fix_ball,0.9); が機能してくれない、などです。いろいろ試行錯誤をしてみると、physics_set_restitution(obj_ball,0.9); とすると、obj_ballに反発係数を与えることができましたが、文法的には違うし、同じようにobj_boxもこの関数でコードを書いても、physics_set_restitution(obj_box,0.9); obj_boxには反発係数を与えることができませんでした。なぜ、fixtureで反発係数を設定し、obj_ballなどに定義させることができないのか、どうやったら正しく反発係数を与えられるのか、fixtureとbindの詳しい仕組みについて教えていただきたいです。稚拙な文章で読みづらいと思いますが、どうかよろしくお願いします。
9f8a7946aa
どすこいさん
通報 ...
Uses Physicsにチェックが入ってるとオブジェクト側で設定したfixtureがバインドされます。
そこから新たにコード上で用意したfixtureをバインドすると二つのfixtureがバインドされた状態になります。
fixtureは複数バインドすることが可能ですので現状だと複数のfixtureがバインドされている状態になっていると予想します。
どうしても、コード上で独自に用意したfixtureを用意する場合はUses Physicsのチェックを外し、物理変数を全部指定しないといけないっぽいです。
めんどくさいですが、次のようにするとよいかもしれません。
また、set_restitutionにはややこしいですが二つの関数があります。
・physics_fixture_set_restitution
・physics_set_restitution
physics_fixture_set_restitutionは上の例のように作成したfixtureのrestitutionを変更する関数です。
physics_set_restitutionはすでにバインドされたfixtureのrestitutionを変更する関数です。
physics_set_restitutionの使い方は次の通りです。
physics_fixture_bindの戻り値を利用してバインドされたfixtureを取得し、そのfixtureのrestitutionを変更します。
バインド済みなので再バインドする必要がありません。
詳しい解説ありがとうございます!解決しました!