プログラミングにつきものの辛い作業,それはバグ取り(デバッグ)である。バグとはプログラムの不具合であり,その原因は,単純なコードの書き間違いによることもあれば,使用する言語の特性を理解していないことに起因していたり,「あっ,こんな場合の対処は考慮していなかった」という設計上の漏れであったりする。原因がわかれば,バグは潰せる(注釈:バグは映画『バグズ・ライフ』のバグ,つまり虫です)。原因がわからなければ,修正のしようがない。

1月12日 Flashでのシューティングゲーム作りを進めるこうしろう。現在の問題は「UFOを出現させると,ロケットからミサイルが発射されなくなった」ことである。つまり,この昔のアニメで見たようなUFOが出現するようになったら,ペン先から,矢印が出なくなったのである。

 「UFOを出す前は,ロケットしか出ていないので,当然そこにフォーカスが当たっていた。だから,スペースキーを押すとそれがロケットに伝わりミサイルが出たし,左右の矢印キーを押すとロケットが右や左に移動した。UFOを出すと,フォーカスがUFOに移り,キーボードの操作がロケットに伝わらないのではないか。」(注釈:フォーカスはカメラのフォーカスと同じ意味なのですが,ソフトウエア上の用語では,何かの項目が選択されている状態を「フォーカスを持っている」などと表現します。)これがこうしろうと私が考えたバグの原因である。

 この線で,修正を始めた。「ロケットにフォーカスを当てるには…」とこうしろうがFlash MXのプログラム言語であるActionScriptをいじるのだが,変化なし。「ああだ,こうだ」と2人で議論するが,結果が出ない。中学2年生の息子と中年に慣れてきた父の間に,ジリジリとした時間が流れる。「あれっ」と,どちらともなく声をあげた。「ロケットに付けたインスタンス名が,スクリプト上のインスタンス名と違う。」バグの原因はつまらぬミスであった。

 例えば,左矢印キーを押すとロケットのインスタンスpen_btnのx座標から20を引き,ロケットを左に移動させるようにプログラムを書いているのだが,
---------------------
on (keyPress "<Left>") {
 pen_btn._x -= 20;
}

---------------------
 ロケットのインスタンス名が(どさくさに紛れてミスタイプしたのだろう)penに変わっていたのである。



 インスタンス名をpen_btnに戻すと問題は解決した。バグがあるとついつい難しいところから考えてしまうのだが,簡単なところで単純なミスを犯していることが多い。

shot4.html
(表示にはMacromedia Flash Player6が必要です。ロケットをマウスで一回クリックしてから,スペースキーや左右矢印キーを押してみて下さい。)

 次の目標は,UFOとミサイルの衝突を検知することである。