【ゲーム?】とりあえず、避けて♪2008年11月13日 17時44分23秒

↓ゲームはここに置いてあります↓
http://www.ne.jp/asahi/crimson/luwan/20081113/Swallow.html

久しぶりに Flashカテゴリの更新です。
ちょっとシューティングのようなゲームを作ろうとしていて、その途中経過です。
エンドレスなゲームですが暇つぶしにでも遊んで頂ければと思います。

ゲームはマウスを Flashの上に乗せた時点から始まってエンドレスです。
簡単な説明文が下の方に書いてあるのでちょこっと読んで下さい。

問題が 解決したら 気が楽に2008年11月13日 20時01分34秒

昨日は酷く情緒不安定でブログの記事を考える事さえもままならない状態だったのだが、今日は随分と安定している。
今日はT社員の侮辱的発言もなかったし、苦労していたプログラムが大きく前進してホッとした事が大きいだろう。
我ながら現金な話だと呆れてしまうが、昨日に関しては頭が煮詰まっているところでT社員の妨害は入ったのだから仕方がなかったか。
何にしても軽い気持ちで帰れる事は嬉しい限りで、明日も今日のような気分で帰れれば良いと思う。

さてと、プログラムの方で詰まっていた件について、どんな問題が発生していたのかを簡単に話してみる。
現象としては一つ前の記事で紹介した弾避けゲームにおいて、発車された弾丸数が 200発を越えた頃から唐突に当たり判定が狂い始めるという内容だ。
色々と調査を進めていくと、画面外へ出て行った弾丸を当たり判定の対象リストから除外する処理が正常に行われなくなるらしい事までは分かった。

当たり判定に使用するリストには 1発の弾丸について 2件のデータが登録されるのだが、ある時点から要素数に奇数が生じ始める。
最初は何かの設計ミスで不正データが混入したり、片側のデータのみ削除されると行った誤動作をしているのかと考えた。
そこで 3パターンくらい改良策を講じたのだけど結果は全く変わらず、要因となりそうな事項すらも見えなくなって完全に煮詰まってしまった、というのが昨日の定時までの話だ。

一晩が開けた今朝、電車を降りてから会社へ向かう道すがら虚ろな目で前を見ている最中に頭の中で煮詰まっていたプログラムの事を考えていた。
改めて整理をしてみると、どう考えても不正データが流れるようなパターンは存在し得ないという結論に達した。
あるとすれば、リストの登録か削除の内部処理そのものが不具合を起こしている可能性くらいだった。

逆にそう思って思い返してみると、不具合が発生する時は決まって大量の弾丸が画面外へ出た時な気がしてきた。
つまり、一度に大量の削除を行おうとすると処理が追い付かずに変なことになるのではないか、そう思ったわけだ。
そこでリストから削除をやめて、再利用を繰り返すことで登録と削除の処理自体を行わないように作り替えてみた。
これが見事に大当たりをして、無事に大量の弾丸が飛び交っていても当たり判定は正常に行われるようになった。

結論をいうとリストの管理をするのに利用している標準機能が大量の削除に対応しきれないという不具合を抱えていた事になる。
そして、俺は他人のミスのせいで32時間近く頭を悩ませることになったというわけだ。
何とも迷惑な話だが、考えてみれば Flashは元より硬派なプログラミングをするようなシステムではないから仕方がないのかも知れない。

何にしても、ホッとできて良かった。