ballClock.jpg
haraです。
今回はBox2Dを使って普通にスクリーンセーバー系の時計です。

ボールの回転がわかりやすいように目印をつけていたら、目印だけの方がちょこちょこ動いている様子がかわいかったのでそのままにしてしまいました。実際のオブジェクトの形は円です。
ボールの個数が時間表示。左から時・分・秒を1桁ずつ表示しています。

微妙につまづいたのは、Box2Dの世界のオブジェクトはx、yの値を直接いじれない?ぽいので
b2Body.SetXForm(new b2Vec2(x,y),rotation);
というふうに指定しなければいけなかったことと、
床からおっこちたりしてb2Worldの領域から出てしまったものは表示リストから外されてしまい、あらかじめ配列に入れてたりしてもアクセスできなくなってしまう、てとこです。
今回の時計は落っこちた円が、表示領域下に置かれた受け皿にずっと置かれっぱなしでループしているという適当な作りなのですが(なので重い)、受け皿からもれたりしてボールが足らない時とかあります。
このへんは都度都度オブジェクトを作成し直す方か、表示外のものはSleepさせておくなどの処理があるとベターですね。
Box2Dは、独自ルールに慣れるまでは扱いが難しい感じです。でも勝手にはねたり動いたりしてくれるのは楽しい、やっぱり。

今日はこのへんで!

HTML5飯