第一章 基础知识

第六节 事件处理

    程序清单1-5 精灵表坐标查看器的HTML代码

    <!DOCTYPE html>

   <head>

     <title>Sprite sheets</title>

     <style>

        body {

           background: #dddddd;

        }

        #canvas {

           position: absolute;

           left: 0px;

           top: 20px;

           margin: 20px;

           background: #ffffff;

           border: thin inset rgba(100,150,230,0.5);

           cursor: pointer;

        }

        #readout {

           margin-top: 10px;

           margin-left: 15px;

           color: blue;

        }

     </style>

  </head>

  <body>

    <div id='readout'></div>

    <canvas id='canvas' width='500' height='250'>

      Canvas not supported

    </canvas>

    <script src='example.js'></script>

  </body>

</html>

程序清单1-6 精灵表坐标查看器的JavaScript代码

var canvas = document.getElementById('canvas'),

    readout = document.getElementById('readout'),

    context = canvas.getContext('2d'),

    spritesheet = new Image();

//Functions..........................................................

function windowToCanvas(canvas, x, y) {

   var bbox = canvas.getBoundingClientRect();

   return { x: x - bbox.left * (canvas.width  /bbox.width),

            y: y - bbox.top * (canvas.height /bbox.height)

          };

}

function drawBackground() {

   var VERTICAL_LINE_SPACING = 12,

       i = context.canvas.height;

   context.clearRect(0,0,canvas.width,canvas.height);

   context.strokeStyle = 'lightgray';

   context.lineWidth = 0.5;

   while(i > VERTICAL_LINE_SPACING*4) {

      context.beginPath();

      context.moveTo(0, i);

      context.lineTo(context.canvas.width, i);

      context.stroke();

      i -= VERTICAL_LINE_SPACING;

   }

}

function drawSpritesheet() {

   context.drawImage(spritesheet, 0, 0);

}

function drawGuidelines(x, y) {

   context.strokeStyle = 'rgba(0,0,230,0.8)';

   context.lineWidth = 0.5;

   drawVerticalLine(x);

   drawHorizontalLine(y);

}

function updateReadout(x, y) {

   readout.innerText = '(' + x.toFixed(0) + ', '+ y.toFixed(0) + ')';

}

function drawHorizontalLine (y) {

   context.beginPath();

   context.moveTo(0,y + 0.5);

   context.lineTo(context.canvas.width, y + 0.5);

   context.stroke();

}

function drawVerticalLine (x) {

   context.beginPath();

   context.moveTo(x + 0.5, 0);

   context.lineTo(x + 0.5,context.canvas.height);

   context.stroke();