だいたい47度

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PageTop

Box2Dで二足歩行のテスト(cocos2d)

cocos2dのBox2Dを使った実験として、さっそく2足歩行のキャラクタを作ってみました。ペンギンのとてもアホらしい動きとなっています。動画の後半はデバッグモードの動画を載せています。


実装方法
実装としては、Prismatic Jointを4本使っています。

まず、ペンギンの横方向に動く四角AをPrismatic Jointでペンギン本体に紐付けます。各StepごとにhorizonalRevJoint->SetMotorSpeed(HOLIZONAL_SPEED);で横方向にモータを駆動させます。また、ペンギンの中心と四角Aの中心の距離を毎Step測定し、一定以上離れたら逆方向へモータが動くようにしています。

2つ目の四角Bを、四角Aと同じ位置に配置し、これも横向きのPrismatic Jointでペンギン本体に紐付けます。こちらは各Stepごとに、四角Aと反対の方向へモータを駆動させます。ただし、動いている内に四角Aと四角Bの位置がズレてきてしまうので、四角Aの鏡像の位置と四角Bの位置が0.1m以上離れた場合は、四角Aの鏡像の位置に向かってモータを駆動させます。

次に足Aを縦向きのPrismatic Jointで四角Aに紐付けます。衝突しないように、足Aにはペンギン本体と同じfixtureDef.filter.groupIndexを振っておきます。足Aには基本的に下向きのモータを駆動させておきます。ただし、四角Aが進行方向に向かっており、かつ四角Aがペンギンの中心に差し掛かっていない場合のみ、上向きにモータを駆動させます。こうすることで足は三角形の軌道を描き、足Bと交互に踏み出させることで進むわけです。

足Bは縦向きのPrismatic Jointで四角Bに紐付け、足Aと同じ実装にします。

ペンギン自体はただの四角ですが、倒れないように毎Stepごとに角度を感知して、適当なインパルスを与えてやっています(こちら参照)。あとmouseJointをできるようにはしてあります。バカっぽくするために卵のカラの帽子もかぶせました。

penguin2.png

penguin1.png

今回わかったこと
下手にGearを使うより、毎Step調整する方がうまくいったりする
一番最初の設計として、ひとつのRevolute jointを軸として、その回転をGear jointで四角A、Bに伝えるようにしていました。しかし、関わる要因が増えたためか、横移動がガタガタになってしまいました。そのため上記の設計をしたのですが、こっちの方が安定しているように思います。Gear jointのパラメータをうまく合わせればもうちょっとうまくいったのでしょうか。

パラメータ調整がめんどくさい、しかし大事
摩擦や重さなど、一つ一つのbodyのパラメータ調整がとても面倒くさいです。しかしながら、ひとつのbodyのひとつのパラメータを変えるだけで全体の動作も変わってきてしまうので、気を使わなくてはなりません。なんか地獄な気がするのですが、いい方法はあるのでしょうか……。

ダイナミックな動作をするには関節を増やすか、簡略化するしかなさそう
可動域を考えると、今回の設計ではちょっとした段差や坂道を超えられません。ので、やっぱり関節をふやしてやらなきゃいけないようです。が、それはパラメータが増えることを意味します。うーん。いっそのこと、キャラクタは四角にタイヤをつけたようなものにして、アニメーションでそれっぽく見せるのもありかもしれません。

jointの破壊の制御がめんどくさい
前回、「jointの破壊は紐付いているbodyの破壊によっても行われますが、基本的には手動で破壊しましょう」と書いたのですが、これ面倒くさいです。オブジェクト同士をつなぐものなので、deallocに書くにしてもどっちに書くか迷います。Learning Cocos2Dだと無視しちゃってるんだよなぁ……。Gear Jointだけ気をつけておくか……。

iPhone画面狭い
関節の多いものをたくさん使って物理系のゲームやろうとするとPTM_RATIO 32じゃキツイですね。上の動画は16でやっています。

コードの可読性が低いと死ぬ
パラメータの数も多く、その上できたあとの微調整もとても多いので、可読性が低いと死にます。Learning Cocos2Dで教えてもらったパターンや、HelloWorldのPhysicsSpriteなどを使って大分楽しているはずですが、もっと頭の中にパターンを作る必要がありそう。

次はどうする?
ということで結構色々面倒くさいことが分かりました。また、見ている分にはなかなか楽しい動きではあるのですが、ゲームとしてはイライラしそうです。

次は、キャラクタをもっと単純に設計してみようと思います。四角に円の車輪だけを付ける感じ。そこにアニメーションを追加してみて歩いている感じが出せるかどうかを試してみます。
試しました
関連記事
スポンサーサイト

PageTop

コメント


管理者にだけ表示を許可する
 

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。