ゴゴゴゴゴ

あほげー参加した。http://ahoge.info/8/index.php はするめ隊@KMCとして参戦してるので遊んでみてね。後輩たちもよろしく。

 

このあほげーというイベントは24時間という制限時間の中でゲームを作るイベントなのだが、24時間フルに使うようなことはない。

 

そう思っていたのだ。

 

 

昨日までは…………!

 

 

今回私はある物理エンジンを使った。コレが相当な厄介者で、バグやら未実装やらがあちこちに潜んでいる。その結果、不眠どころか食事もせず、チョコを摘んだり(と言ってもファミリーパック半分も消費してない)みかんを食べたり(1個だけ)でしのいでいた。どうしてこうなった……。というかよく保ったな私。好きな事には全力出せるタチだからね。

 

というわけでその厄介者、PhysicsHelper for Silverlightの話。

その名の通りSilverlight用の物理エンジンだ。「基本的な部分は」割と扱いやすく、XAMLをいじるだけでもそれらしく振る舞うものができる。しかし、厄介な問題を色々抱えているのである……。

 

例を上げてみよう。例えば"CollisionGroup"というメンバが物理演算対象のオブジェクトにあり、同じグループに属する者同士は衝突しないようになっている。はずだった。が、これは機能しない。無意味である。

 

そして、座標系が複雑である。スクリーン座標と大きさも全く対応しない独自の座標をそれぞれが持つ。かと思えばスクリーン座標を持っているものも居る。が、これは序の口である。最大の問題はこの座標系を取り扱うあるクラスだったのだ。

 

BoundaryHelperBox2dというクラスがある。これにキャンバスを登録することで、キャンバス上の座標と独自の座標を対応付けることができる。

が、このコンストラクタがひどいのである。なんとコンストラクタ内で多量のstaticな要素を書き換え、系全体をぶち壊すのである。何がしたいのかは分からないが、BoundaryHelperBox2dを2つ作ってはいけない。絶対。

 

今回ずっと寝ず食べずで篭っていた原因の一つがこれだ。画面の全体の配置がめちゃくちゃになるバグの原因が座標変換用のクラスのコンストラクタを呼び出したことだなんて誰が予想できるだろうか。

 

散々叩いたが、このライブラリは非常に便利なので軽く使うのはおすすめする。が、難しいことをしようとすると泥沼に陥るので気をつけたほうがいい。