box2dモジュールのデモゲーム出来たよ
シューティングと比べてちょっと作りこみ浅いけどな。
http://jgame-js.sourceforge.jp/examples/physaction.html
よかったら見てくれ。
box2dサポートの前後関係
何でこのタイミングでbox2dをサポートしたかって事なんだけど、シューティング作ったら次のサンプルはアクションだよなぁと。
ノベルはエフェクト系ライブラリが足りてない、RPGは色々めんどくさい、シミュレーションはさらに面倒くさいので、順番的にはシューティング→アクション→ノベル→RPG→シミュレーションなわけですよ。
どっかにパズル入るかもしれんけど。
んで、アクションやる場合に普通にマリオ作ってもいいんだけど、どうせ加減速の計算やるなら、物理エンジンやっちまった方がいいんじゃね、と。
じゃあアクションゲームのサンプルゲーム作る前にbox2dサポートしちゃおうぜってのが本来の話。
box2dについての雑感
で、box2dサポートして、ゲーム作るために色々いじってみた。いじってみたけど、こいつ言う事きかねぇよマジでw
むずいといより、わかんないってのが適切。なんでそーなっちゃうのと。
はじめ普通にマリオやろうとしてたんだけど、のこのこの甲羅の上に乗ったらマリオがもう走れない。
ここ足場としてバランス悪い、みたいな物理的なもっともな理由を添えて、走ってほしいはずのマリオがくるくる回る。ゲーム世界に慣れてる側からすればすごく滑稽な動きになるんだよ。
摩擦係数とかいじりにいじってもなっかなか上手くいかん。
んであーでもないこーでもないって色々試した結論として、box2dは円と矩形の世界なんだ。
円と矩形の世界なら面白いものが作れる。それ以外をやってかつ言う事をきかせるのはすんげー大変。
だから、box2dでやるにはいかに円と矩形を上手く使うか。
仮に適当なポリゴンのオブジェクトを配置するにしても、それはメインプレーヤー用に1個か2個程度使うのならいいけど、主体にしちゃあかんと。
それに気付くまでが大変。気付いてからは、それなりにかわいいやつに見えてきた、ってのがbox2dについてのざっくりとした総論。
今回のサンプルゲームについて
今回のサンプルゲームは、box2dとの相性の問題でアクションゲームにしたかったのがアクションパズルになってしまった訳だけど、まあそれなりに気にいっているところもある。
重力の方向を変えられる、接触でぶっ壊すっていう基本アイデアはまあ悪くないかなと。
サンプルだからそんなに作り込んでないけど、タッチ向きに作り込めばそれなりのが出来ると思うな。
気にいってるのは、こういうのが簡単に出来ますよーっていうデモとしてはいいんじゃなかろうかと。
ちなみに上手い人がやると多分10000点くらい出る。
重力変更が90度固定だからそんなに飛び抜けた数値は出せないと思うけど。
モジュールの課題
ゲーム制作に合わせて色々モジュールも変えたので、そのまとめもついでに。
ああそうそう、モジュールはgithubにあげておいた。名前もJGBox2Dだと長すぎたので、jgb2に変更。
https://github.com/tsugehara/jgb2
今回box2d以外にbox2dのtypescript用定義ファイルを作ってる人がいて、その人がgithubだったから俺もgithubにしようかなってだけ。
http://github.com/jbaldwin/box2dweb.d.ts
ざっとまとめると、今回やったのは、enchant.jsのbox2dサポートより少しはマシじゃないの、でも全然機能的には十分じゃないよねってレベル。
特に衝突後のイベント処理がbox2dの知識必須になってて我ながらちょっとひどいんだが、衝突処理は俺も所詮一夜漬けだからどうラップしていいのかわかんねーし。偉い人気が向いたらヘルプお願いします。
あとjoint。
jointは調べたけどすまーんギブアップって感じ。
昨日相当jointに時間かけて試しはしたけど、まともにサポートするにはあと3日くらいかかるような気がした。
そこまで時間かける気はないんで申し訳ないけどdistanceJointのラッパー一個書くだけで終わらせた。
その他色々不満はあるけど、サンプルゲームの作り込み問題も含めて、この辺でストップしとくのが本筋から脱線しない範囲でのぎりぎりの範囲だと思う。
つーことで、いまいちだけどこんなもんで。
サンプルゲームくらいならそれなりに楽に作れるから、jgame.jsともどもjgb2もよろしくっす。