ジェスチャーによる回転イベント発生時の処理
回転ジェスチャーが発生すると関数checkRotate()が呼び出されます。何度回転したのかはイベントオブジェクトのrotationプロパティに入っています。SafariではFirefoxなどと同じイベントハンドラ(イベント発生時に呼び出す関数)にイベントオブジェクトが渡されますが、これとは別にInternet Explorerとの互換性を保つためのeventオブジェクトも用意されています。ここでは関数のパラメータではなく、eventオブジェクトのrotationプロパティを参照しています。
event.rotationで回転角度を読み出したら、その値を画像の回転角度として指定します。回転角度は小数値になるためMath.round()を使って四捨五入し整数化しています。回転させた角度と指示した回転角度が一致しているかどうか調べ、一致している場合のみゲームクリアの処理を行います。
一致している場合は、現在の時間(ミリ秒)を求め、ゲーム開始時の時間を引きます。結果はミリ秒になっているので1000で割ると秒数となります。この時間をアラートダイアログに表示します。 最後に、ゲーム開始ボタンを表示してできあがりです。
回転中に角度が表示される。基本的にはリアルタイムに表示されるが、場合によっては一度ジェスチャーを解除しないと表示されないことがある |
ゲームオーバー時の画面。回転させるまでの時間が表示される |
再度ゲーム開始ボタンをクリックするとゲームをプレイすることができる |
コード03
function checkRotate(){
if (!gameFlag) return; // ゲーム中でなければ処理しない
if (!rotFlag){
rotFlag = true;
startTime = (new Date()).getTime(); // 開始時間を取得
}
currentRot = Math.round(saveRot + event.rotation) % 360; // 回転角度を取得
document.getElementById("result").innerHTML = "現在の回転角度:"+currentRot+"度";
document.getElementById("myMap").style.webkitTransform = "rotate(" +currentRot+ "deg)";
if (kakudo != currentRot) return;
gameFlag = false; // ゲームを終了
var endTime = (new Date()).getTime();
var sec = (endTime - startTime) / 1000;
txt = "正しく回転させるまでの時間は"+sec+"秒でした";
document.getElementById("msg").innerHTML = "";
document.getElementById("result").innerHTML = txt;
alert(txt);
document.getElementById("gameForm").style.visibility = "visible";
}