小强的HTML5移动开发之路(7)——坦克大战游戏1

时间:2022-09-02 20:59:13

来自:http://blog.csdn.net/dawanganban/article/details/17693145

上一篇中我们介绍了关于Canvas的基础知识,用Canvas绘制各种图形和图片,在上一篇的基础上我们来做一个基于HTML5的坦克大战游戏,下面我们开始吧小强的HTML5移动开发之路(7)——坦克大战游戏1

一、用Canvas画出我们的坦克

我们设计的坦克结构如下图所示,如果有的朋友有更好的设计,希望分享和交流一下。

小强的HTML5移动开发之路(7)——坦克大战游戏1

如上图所示,我们的坦克基本上是由三个矩形和一个圆形一个线段组成,每个部件的尺寸进行了标记,单位为px,下面我们用上一篇中讲到的知识来画出我们的坦克,注意:我们在画坦克的时候应该选择一个参考点,这里我们选择的是坦克的左上角,如图所示。

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8"/>
  5. </head>
  6. <body>
  7. <h1>html5-坦克大战</h1>
  8. <!--坦克大战的战场-->
  9. <canvas id="tankMap" width="400px" height="300px" style="background-color:black"></canvas>
  10. <script type="text/javascript">
  11. //得到画布
  12. var canvas1 = document.getElementById("tankMap");
  13. //定义一个位置变量
  14. var heroX = 80;
  15. var heroY = 80;
  16. //得到绘图上下文
  17. var cxt = canvas1.getContext("2d");
  18. //设置颜色
  19. cxt.fillStyle="#BA9658";
  20. //左边的矩形
  21. cxt.fillRect(heroX,heroY,5,30);
  22. //右边的矩形
  23. cxt.fillRect(heroX+17,heroY,5,30);
  24. //画中间的矩形
  25. cxt.fillRect(heroX+6,heroY+5,10,20);
  26. //画出坦克的盖子
  27. cxt.fillStyle="#FEF26E";
  28. cxt.arc(heroX+11,heroY+15,5,0,360,true);
  29. cxt.fill();
  30. //画出炮筒
  31. cxt.strokeStyle="#FEF26E";
  32. cxt.lineWidth=1.5;
  33. cxt.beginPath();
  34. cxt.moveTo(heroX+11,heroY+15);
  35. cxt.lineTo(heroX+11,heroY);
  36. cxt.closePath();
  37. cxt.stroke();
  38. </script>
  39. </body>
  40. </html>

小强的HTML5移动开发之路(7)——坦克大战游戏1

二、怎么让坦克动起来?

在研究怎么让坦克动起来之前,我们先来研究一下怎么让一个小球通过键盘操作使其动起来。

首先我们给<body>标签添加一个监听函数

  1. <body onkeydown="test()">

;

  • var ballY = 80;
  • //得到绘图上下文
  • var cxt = canvas1.getContext("2d");
  • drawBall();
  • function drawBall(){
  • //画出一个红色的圆球
  • cxt.beginPath();  //要注意闭合路径
  • cxt.fillStyle="#FF0000";
  • cxt.arc(ballX,ballY,10,0,360,true);
  • cxt.closePath();
  • cxt.fill();
  • }
  • //现在按键盘上ASDW移动小球
  • //说明:当我们按下一个键,实际上触发了一个onkeydown事件
  • function test(){
  • var code = event.keyCode;  //键盘上字幕的ASCII码
  • switch(code){
  • case 87:
  • ballY--;
  • break;
  • case 68:
  • ballX++;
  • break;
  • case 83:
  • ballY++;
  • break;
  • case 65:
  • ballX--;
  • break;
  • }
  • //把画布清理
  • cxt.clearRect(0,0,400,300);
  • //重新绘制
  • drawBall();
  • }
  • </script>
  • </body>
  • </html>