(C)WorldWideSoftware

<!DOCTYPE html>
<html lang="ja">
 <head>
  <meta charset="utf-8">
  <title>慣性のある動き</title>
 </head>
 <body>
  <canvas id="bg" width="800" height="600"></canvas><br>
  <a href="http://www.wwsft.com">(C)WorldWideSoftware</a><br>
【説明】
カーソルキーで移動します。カニの動きには慣性が働きます。
キー入力で座標の変数を変化させるのではなく、<strong>“座標の変化量”を計算</strong>し、それを座標に加算します。
慣性を表現する最も基本的なプログラムです。
<br>
<a href="inertia00src.html">ソースコードの確認</a>

  <script>
  //描画面(キャンバス)の準備
  var cvs = document.getElementById("bg");
  var ctx = cvs.getContext("2d");

  //キー入力
  var key = 0;
  window.onkeydown = function(event) { key = event.keyCode; }
  window.onkeyup = function(event) { key = 0; }

  //画像の読み込み
  var img = [], iOK = [];
  function loadImg(n, fname) {
   iOK[n] = false;
   img[n] = new Image();
   img[n].src = fname;
   img[n].onload = function() {iOK[n]=true;}
  }
  loadImg(0, "crab.png");//カニの画像
  loadImg(1, "water.png");//背景画像

  //変数
  var plX = 400, plY = 600;//プレイヤーキャラの座標
  var xp = 0, yp = 0;//移動量(慣性を持たせる)
  var tmr = 0;//タイマー → 背景のスクロールで使用

  //メイン処理
  function mainProc() {
   tmr++;

   //水(背景)の描画 スクロールさせる
   if(iOK[1] == true) {
    ctx.drawImage(img[1], tmr%800-800, 0);
    ctx.drawImage(img[1], tmr%800, 0);
   }

   //プレイヤーキャラの移動
   if(key==38 && yp>-12) yp=yp-2;//カーソルキー↑
   if(key==40 && yp< 12) yp=yp+2;//カーソルキー↓
   if(key==37 && xp>-12) xp=xp-2;//カーソルキー←
   if(key==39 && xp< 12) xp=xp+2;//カーソルキー→
   if(key== 0) {//何も入力しないと
    xp = parseInt(xp*0.9);//左右の移動量を減らす
    if(yp < 12) yp++;//下に落ちていく
   }
   plX = plX + xp;
   plY = plY + yp;
   if(plX < -50) plX=850;//左端に行ったら右端にワープ
   if(plX > 850) plX=-50;//右端に行ったら左端にワープ
   if(plY <  80) {plY= 80; yp=0;}//画面上にめりこまないように
   if(plY > 600) {plY=600; yp=0;}//画面下にめりこまないように

   //プレイヤーキャラの表示
   if(iOK[0] == true) ctx.drawImage(img[0], plX-50, plY-80);
  }
  setInterval(mainProc, 50);
  </script>
 </body>
</html>

←動作確認に戻る