canvas

haxeflashアプリを作ってみようと思いつつ,どうにもめんどくさいなぁと思っていた今日この頃,Javascriptで実装した物理エンジンを見つけました.canvasを使っているみたい.CoolClock - The Javascript Analog Clockなんて記事も見つけたので,canvasについて調べて見ようと思いたちました.ざっと調べた所canvas に絵を描く - Web API | MDNが一番わかりやすいと書いてあったので読んでみてます.何か動かしてみてから中身を調べようと思ってコピペしてみたのが以下のファイルです.

<html>
  <head>
    <title>Canvas tutorial</title>
    <script type="text/javascript">
    function init(){
      clock();
      setInterval('clock()',1000);
    }
    function clock(){
      var now = new Date();
      var ctx = document.getElementById('canvas').getContext('2d');
      ctx.save();
      ctx.clearRect(0,0,150,150);
      ctx.translate(75,75);
      ctx.scale(0.4,0.4);
      ctx.rotate(-Math.PI/2);
      ctx.strokeStyle = "black";
      ctx.fillStyle = "white";
      ctx.lineWidth = 8;
      ctx.lineCap = "round";

      // 時間のマーク
      ctx.save();
      ctx.beginPath();
      for (i=0;i<12;i++){
        ctx.rotate(Math.PI/6);
        ctx.moveTo(100,0);
        ctx.lineTo(120,0);
      }
      ctx.stroke();
      ctx.restore();

      // 分のマーク
      ctx.save();
      ctx.lineWidth = 5;
      ctx.beginPath();
      for (i=0;i<60;i++){
        if (i%5!=0) {
          ctx.moveTo(117,0);
          ctx.lineTo(120,0);
        }
        ctx.rotate(Math.PI/30);
      }
      ctx.stroke();
      ctx.restore();

      var sec = now.getSeconds();
      var min = now.getMinutes();
      var hr  = now.getHours();
      hr = hr>=12 ? hr-12 : hr;

      ctx.fillStyle = "black";

      // 短針を描く
      ctx.save();
      ctx.rotate( hr*(Math.PI/6) + (Math.PI/360)*min + (Math.PI/21600)*sec )
      ctx.lineWidth = 14;
      ctx.beginPath();
      ctx.moveTo(-20,0);
      ctx.lineTo(80,0);
      ctx.stroke();
      ctx.restore();

      // 長針を描く
      ctx.save();
      ctx.rotate( (Math.PI/30)*min + (Math.PI/1800)*sec )
      ctx.lineWidth = 10;
      ctx.beginPath();
      ctx.moveTo(-28,0);
      ctx.lineTo(112,0);
      ctx.stroke();
      ctx.restore();

      // 秒針を描く
      ctx.save();
      ctx.rotate(sec * Math.PI/30);
      ctx.strokeStyle = "#D40000";
      ctx.fillStyle = "#D40000";
      ctx.lineWidth = 6;
      ctx.beginPath();
      ctx.moveTo(-30,0);
      ctx.lineTo(83,0);
      ctx.stroke();
      ctx.beginPath();
      ctx.arc(0,0,10,0,Math.PI*2,true);
      ctx.fill();
      ctx.beginPath();
      ctx.arc(95,0,10,0,Math.PI*2,true);
      ctx.stroke();
      ctx.fillStyle = "#555";
      ctx.arc(0,0,3,0,Math.PI*2,true);
      ctx.fill();
      ctx.restore();

      ctx.beginPath();
      ctx.lineWidth = 14;
      ctx.strokeStyle = '#325FA2';
      ctx.arc(0,0,142,0,Math.PI*2,true);
      ctx.stroke();

      ctx.restore();
    }
    </script>
    <style type="text/css">
      canvas { border: 1px solid black; }
    </style>
  </head>
  <body onload="init();">
    <canvas id="canvas" width="150" height="150"></canvas>
  </body>
</html>

アナログ時計を表示します.1秒毎に時計を描き直してるみたい.もっと軽く作ってみたいな.だめなのかしらん.