爆発の処理
爆発の処理を行うのが関数bakuhatsu()
です。まずゲーム中でなければ爆発の処理を行わないようにします。次に爆発の回数を示す変数bakCountから1を引きます。爆発パターンは2つしか用意してありませんので、交互に表示することで爆発っぽく見せています。交互に爆発パターンの画像を差し替えるために「bakCount & 1」
として0か1を求めています。この&
はビット演算を行う論理積(AND)です。論理積の場合、双方のビットが1の時は1になりますが、それ以外は0になります。実際にどういう結果になるのかを以下の表に示します。
10進数 | 2進数(ビットパターン) | 1と論理積をとった場合の結果 |
---|---|---|
0 | 0000 | 0 |
1 | 0001 | 1 |
2 | 0010 | 0 |
3 | 0011 | 1 |
4 | 0100 | 0 |
5 | 0101 | 1 |
6 | 0110 | 0 |
7 | 0111 | 1 |
8 | 1000 | 0 |
9 | 1001 | 1 |
10 | 1010 | 0 |
結果を見ると綺麗に0と1が交互に繰り返されるのが分かります。あとは、0の場合の画像と1の場合の画像を表示すればよいことになります。ただし、if()
を使って条件判断をおこなうのは面倒なので、あらかじめ「0.gif」「1.gif」という名前の画像を用意しておきます。論理積「bakCount & 1」
に対応したURLを生成し爆発画像のURLとします。
爆発し終わったら爆発パターンを見えない位置に設定します。ここではY座標を-100として完全に爆発画像を見えないようにしています。また、爆発処理が完了したので爆発中であることを示す変数bakFlagにfalseを入れます。
コード05
function bakuhatsu(){
if (!bakFlag) return; // ゲーム中でなければ以後の処理を行わない
bakCount--; // 爆発時間を示すカウンタを減らす
var num = bakCount & 1; // 0または1にする
document.getElementById("bak").src = "images/bak"+num+".gif";
if (bakCount < 0 ){
document.getElementById("bak").style.top = -100;
bakFlag = false;
}
}