当前位置:嗨网首页>书籍在线阅读

12-玩家飞船的状态变化

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

8.5.2 玩家飞船的状态变化

仅需要在静止状态和推进状态之间进行简单的切换就可以模拟动画。下面看看实现这个效果的完整的HTML文件。例8-4在drawScreen()函数上面的新代码段中设置了canvasApp类级别的变量。在这个位置可以放置在canvasApp()函数作用域中的全局变量。

例8-4 在推进动画中玩家飞船的状态改变

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Ch8Ex4 - Ship animation loop</title>
<script type="text/javascript">
window.addEventListener('load', eventWindowLoaded, false); 
function eventWindowLoaded(){
  canvasApp();
}
function canvasApp(){
  var theCanvas = document.getElementById('canvas');
  if (!theCanvas || !theCanvas.getContext){
     return;
  }
  var context = theCanvas.getContext('2d');
  if (!context){
     return;
  }
  //canvasApp类级别变量
  var shipState=0; //0=static, 1=thrust
  function drawScreen(){
   //update the shipState
   shipState++;
   if (shipState >1){
     shipState=0;
  }
  // 绘制背景和文字
  context.fillStyle = '#000000';
  context.fillRect(0, 0, 200, 200);
  context.fillStyle = '#ffffff';
  context.font = '20px sans-serif';
  context.textBaseline = 'top';
  context.fillText ("Player Ship - Thrust", 0, 180);
  //绘制飞船
  context.strokeStyle = '#ffffff';
  context.beginPath();
  context.moveTo(10,0);
  context.lineTo(19,19);
  context.lineTo(10,9);
  context.moveTo(9,9);
  context.lineTo(0,19);
  context.lineTo(9,0);
  if (shipState==1){
    //绘制推进火焰
    context.moveTo(8,13);
    context.lineTo(11,13);
    context.moveTo(9,14);
    context.lineTo(9,18);
    context.moveTo(10,14);
    context.lineTo(10,18);
  }
  context.stroke();
  context.closePath();
  }
  var FRAME_RATE=40;
  var intervalTime=1000/FRAME_RATE; 
  gameLoop();
  function gameLoop() {
     drawScreen();
     window.setTimeout(gameLoop, intervalTime);
  }
}
</script>
</head>
<body>
<div style="position: absolute; top: 50px; left: 50px;">
<canvas id="canvas" width="200" height="200">
Your browser does not support the HTML 5 Canvas.
</canvas>
</div>
</body>
</html>

当运行例8-4时,可以看到玩家飞船位于画布的左上角,每一帧会切换静止与推进状态。