ころころ
今日はいったんgainerとLEDから離れて、box2Dという物理演算のライブラリに手をだしてみました。
http://box2dflash.sourceforge.net/
↑こんな感じっていう公式のサンプル
んでできたのがコレ↓
(sleipnirで表示→更新したらバグった。一時ファイル消したらなおるけどなんだろ。IEだとバグらない。FireFoxも大ジョブかな。FireFoxのIEタブでもバグった。ステージサイズをフレキシブルにしてるせいかもしれない。)追記:stage.stageWideとstage.stageHeightを数字に置き換えといたから一応治った。
http://d.hatena.ne.jp/nitoyon/20090428/box2dflashas3_2_0_2
↑主にこのサイトにお世話になりました。
今回はほとんどこのサイトの通りなのでソースは貼りません。
とはいっても、なんだかんだでかなりの時間を費やしてしまったわけで。
とりあえず気になったことをメモ
・オブジェクトのサイズは10cm〜数メートル。あんまり小さいとバグる。らしい
サンプルとかだと10m級の岩がゴロゴロ転がってるのがザラ。
ガリレオさんの言ってるとおり、空気抵抗を考慮しなければ大きな岩だろうが野球のボールだろうが落ちるスピードは同じ。
だけどもだっけど、100mの高さから落ちるのと1mの高さから落ちるのでは話がちがう。
なにがいいたいかってーと、10mの岩が100mの高さからゴロゴロ落ちてるのを遠くから見てるって状況は“リアル”じゃないよねーって話。
べつにモニタの中の現象が必ずしも“リアル”である必要はないけど、一応物理演算を使った描写なわけだから、一旦はリアルを操っときたい。
で、ほどほどに小さくしてみるんだけど、ピーキーな動きをしすぎてぜんぜんリアルじゃない。
ビー玉とを机の上でパッと落としたらほぼ一瞬で机に落ちる。
けどそれを表現するのは難しそうだ。っつー。
ってことで“リアルっぽい”けどかなり怠慢に動くFlashが世にあふれてる訳を体感した。
・b2Worldのプロパティ、Stepの引数が(1/フレーム,変な数)
変な数はレンダリングのクオリティみたいなものらしい。
10くらいがいいらしい。大きいとめり込んだりしなくなるらしい。
大きくしてもめり込む状況はめり込む。
・g≒9.8 まぁ10でいっか。みたいな。
・h=1/2*g*t~2
つまり、東京タワー(333m)から飛び降りたら、
333=9.8*t~2*1/2
t=√2*333/9.8≒8.24(秒)かかるってことですね。
実際は空気抵抗があるのでもちっとかかるってことですか。
ちなみに上のFlashは40cmくらいの球かな?あまり自信はない。
・5frameに一回実行なんてときには
count = (count + 1) % 5;
みたいな感じで、%(剰余数)を使ってやるといいみたい。
(プログラミングでは常識なのかもね)
あと物理ぱわーの有効範囲の指定がピクセルじゃなくてメートル指定なのが微妙に癖がある。
最後までよくわからなかった。
いろいろ、へー、はー、ぐぬぬぬ、とか思いながらやったんだけど、出来てみるとなにを書きとめとくべきかわからん。。。ってことでこんなもんで。
ちなみに皮を剥がすとこんな感じ↓
そのままじゃつまらんので球を小さくして大量投入。障害物の位置も動かしてみた。