<script> var canvas; var ctx; var mx = 20; var my = 20; //どのキーを押しているかを記録しておくための変数 var keyCode; var dx; var dy; window.onload = function(){ canvas = document.querySelector("#canvas"); ctx = canvas.getContext("2d"); //キーを離した(keyup)時の処理。キーの記録の変数の値を消す(nullにする) document.addEventListener("keyup", function(event){ keyCode = null; }); //キーを押した(keydown)時の処理。キーの番号を記録しておく document.addEventListener("keydown", function(event){ keyCode = event.keyCode; }); setInterval(draw, 40); }; function draw(){ //処理は省略 } </script>
document.addEventListenerはイベントというユーザがブラウザ上で何か操作した時に処理を開始する(ハンドラ-)ために用意しておくもので、addEventListenerの第一引数にkeyup、keydownやclick等の操作を入れて、第二引数には実行したい処理を関数の形式で用意しておきます。document.addEventListener(“keydown”, 実行したい関数名);で何のキーを押した時に実行される処理を追加します。今回はキーを押すか、離すかで用意したkeyCode変数に現在の状況を入れてます。キーボードにある各キーには番号が振り分けられており、下矢印のキーには38が当てられています。event.keyCodeで各キーの番号を取得できます。次にsetIntervalでセットされているdraw関数を見ていきます。
function draw(){ //今押しているキーから、どの向きに箱を移動するかを設定する関数を実行する changeDirection(); //処理の順番を方向を決めた直後に変更する mx = mx + dx; my = my + dy; ctx.fillStyle = "white"; ctx.fillRect(0, 0, 400, 300); ctx.beginPath(); ctx.moveTo(mx, my); ctx.lineTo(mx, my + 20); ctx.lineTo(mx + 20, my + 20); ctx.lineTo(mx + 20, my); ctx.lineTo(mx, my); ctx.strokeStyle = "blue"; ctx.stroke(); } function changeDirection(){ //ボタンを押してない時の挙動、keyCodeにはundefinedかnullが入っている if(keyCode == undefined || keyCode == null){ dx = 0; dy = 0; } //左のカーソル(37のキー)を押したとき if(keyCode == 37){ dx = -1; } //上のカーソル(38のキー)を押したとき if(keyCode == 38){ dy = -1; } //右のカーソル(39のキー)を押したとき if(keyCode == 39){ dx = 1; } //下のカーソルを押したとき if(keyCode == 40){ dy = 1; } }
draw関数の最初にchangeDirectionという関数を追加して、addEventListener内でkeyCodeに入れたキーの番号を元にdxとdyの数字を決定させ、その後に四角い箱用のmxとmyを変更して四角を描きます。
このコードを追加したことにより、キーに対応して箱が動くアニメーションになります。
0 件のコメント:
コメントを投稿