H5 canvas控制坦克移动2
- //封装一个画坦克的函数,传两个参数x,y,分别代表左上角的横纵坐标
- //再增加一个参数dir来表示方向 上下左右分别传"u" "d" "l" "r"
- function drawTank(x,y,dir){
- var cxt = getCxt();
- switch(dir){
- case "u": //此时造一个向上的坦克
- cxt.fillStyle = "#542174";
- cxt.fillRect(x,y,20,65);
- cxt.fillRect(x+70,y,20,65);
- cxt.fillRect(x+23,y+10,44,50);
- cxt.fillStyle = "#FCB827";
- cxt.beginPath();
- cxt.arc(x+45,y+35,16,0,2*Math.PI,false);
- cxt.closePath();
- cxt.fill();
- cxt.strokeStyle = "#FCB827";
- cxt.lineWidth = "8.0";
- cxt.moveTo(x+45,y+35);
- cxt.lineTo(x+45,y-25);
- cxt.stroke();
- break;
- case "d": //此时造向下的坦克
- cxt.fillStyle = "#542174";
- cxt.fillRect(x,y,20,65);
- cxt.fillRect(x+70,y,20,65);
- cxt.fillRect(x+23,y+10,44,50);
- cxt.fillStyle = "#FCB827";
- cxt.beginPath();
- cxt.arc(x+45,y+35,16,0,2*Math.PI,false);
- cxt.closePath();
- cxt.fill();
- cxt.strokeStyle = "#FCB827";
- cxt.lineWidth = "8.0";
- cxt.moveTo(x+45,y+35);
- cxt.lineTo(x+45,y+95); //和向上造相比,只有炮筒需要改变
- cxt.stroke();
- break;
- case "l": //此时造向左的坦克
- cxt.fillStyle = "#542174";
- cxt.fillRect(x,y,65,20); //和向上造坦克相比,画第一个矩形时长宽互换即可
- cxt.fillRect(x,y+70,65,20); //向左的坦克,注意坐标之间的转换即可,以下类似不再一一解释
- cxt.fillRect(x+10,y+23,50,44);
- cxt.fillStyle = "#FCB827";
- cxt.beginPath();
- cxt.arc(x+35,y+45,16,0,2*Math.PI,false);
- cxt.closePath();
- cxt.fill();
- cxt.strokeStyle = "#FCB827";
- cxt.lineWidth = "8.0";
- cxt.moveTo(x+35,y+45);
- cxt.lineTo(x-25,y+45);
- cxt.stroke();
- break;
- case "r":
- cxt.fillStyle = "#542174";
- cxt.fillRect(x,y,65,20); //和造向左的坦克类似,只要改动炮筒即可向右
- cxt.fillRect(x,y+70,65,20);
- cxt.fillRect(x+10,y+23,50,44);
- cxt.fillStyle = "#FCB827";
- cxt.beginPath();
- cxt.arc(x+35,y+45,16,0,2*Math.PI,false);
- cxt.closePath();
- cxt.fill();
- cxt.strokeStyle = "#FCB827";
- cxt.lineWidth = "8.0";
- cxt.moveTo(x+35,y+45);
- cxt.lineTo(x+95,y+45);
- cxt.stroke();
- }
- }
- drawTank(myTank.x,myTank.y,myTank.direction);
- window.onkeydown = function(eve){
- switch(eve.keyCode){
- case 38:
- case 87:
- myTank.y -= myTank.step; //Y坐标减小向上移动
- myTank.direction = "u"; //改变成向上的方向
- break;
- case 40:
- case 83:
- myTank.y += myTank.step; //Y坐标增加向下移动
- myTank.direction = "d"; //改变为向下的方向
- break;
- case 37:
- case 65:
- myTank.x -= myTank.step; //X坐标减小向左移动
- myTank.direction = "l"; //改变为向左的方向
- break;
- case 39:
- case 68:
- myTank.x += myTank.step; //X坐标增加向右移动
- myTank.direction = "r"; //改变为向右的方向
- }
- };
- myTank.turnUp = function(){
- myTank.y -= myTank.step;
- myTank.direction = "u";
- };
- myTank.turnDown = function(){
- myTank.y += myTank.step;
- myTank.direction = "d";
- };
- myTank.turnLeft = function(){
- myTank.x -= myTank.step;
- myTank.direction = "l";
- };
- myTank.turnRight = function(){
- myTank.x += myTank.step;
- myTank.direction = "r";
- };
- window.onkeydown = function(eve){
- switch(eve.keyCode){
- case 38:
- case 87:
- myTank.turnUp();
- break;
- case 40:
- case 83:
- myTank.turnDown();
- break;
- case 37:
- case 65:
- myTank.turnLeft();
- break;
- case 39:
- case 68:
- myTank.turnRight();
- }
- };
- var myTank = {
- x : 350,
- y : 400,
- step : 3,
- direction : "u",
- turnUp : function(){
- myTank.y -= myTank.step;
- myTank.direction = "u";
- },
- turnDown : function(){
- myTank.y += myTank.step;
- myTank.direction = "d";
- },
- turnLeft : function(){
- myTank.x -= myTank.step;
- myTank.direction = "l";
- },
- turnRight : function(){
- myTank.x += myTank.step;
- myTank.direction = "r";
- }
- };
- var myTank = {
- turnUp : function(){
- if((myTank.y-25) >= 0){
- myTank.y -= myTank.step;
- myTank.direction = "u";
- }
- }
- };
- var myTank = {
- turnDown : function(){
- if((myTank.y+90) <= 500){
- myTank.y += myTank.step;
- myTank.direction = "d";
- }
- }
- };
- var myTank = {
- turnLeft : function(){
- if((myTank.x-25) >= 0){
- myTank.x -= myTank.step;
- myTank.direction = "l";
- }
- },
- turnRight : function(){
- if((myTank.x+90) <= 800){
- myTank.x += myTank.step;
- myTank.direction = "r";
- }
- }
- };
- //封装一个获取绘图环境的函数
- function getCxt(){
- var myCanvas = document.getElementById('floor'),
- myContext = myCanvas.getContext('2d');
- return myContext;
- }
- //为了防止重复地获取节点影响性能,我们将获取到的绘图环境(也就是画笔对象)存起来
- var oCxt = getCxt();
- //封装一个画坦克的函数,传两个参数x,y,分别代表左上角的横纵坐标
- //再增加一个参数dir来表示方向 上下左右分别传"u" "d" "l" "r"
- function drawTank(x,y,dir){
- switch(dir){
- case "u": //此时造一个向上的坦克
- oCxt.fillStyle = "#542174";
- oCxt.fillRect(x,y,20,65);
- oCxt.fillRect(x+70,y,20,65);
- oCxt.fillRect(x+23,y+10,44,50);
- oCxt.fillStyle = "#FCB827";
- oCxt.beginPath();
- oCxt.arc(x+45,y+35,16,0,2*Math.PI,false);
- oCxt.closePath();
- oCxt.fill();
- oCxt.strokeStyle = "#FCB827";
- oCxt.lineWidth = "8.0";
- oCxt.moveTo(x+45,y+35);
- oCxt.lineTo(x+45,y-25);
- oCxt.stroke();
- break;
- case "d": //此时造向下的坦克
- oCxt.fillStyle = "#542174";
- oCxt.fillRect(x,y,20,65);
- oCxt.fillRect(x+70,y,20,65);
- oCxt.fillRect(x+23,y+10,44,50);
- oCxt.fillStyle = "#FCB827";
- oCxt.beginPath();
- oCxt.arc(x+45,y+35,16,0,2*Math.PI,false);
- oCxt.closePath();
- oCxt.fill();
- oCxt.strokeStyle = "#FCB827";
- oCxt.lineWidth = "8.0";
- oCxt.moveTo(x+45,y+35);
- oCxt.lineTo(x+45,y+95); //和向上造相比,只有炮筒需要改变
- oCxt.stroke();
- break;
- case "l": //此时造向左的坦克
- oCxt.fillStyle = "#542174";
- oCxt.fillRect(x,y,65,20); //和向上造坦克相比,画第一个矩形时长宽互换即可
- oCxt.fillRect(x,y+70,65,20); //向左的坦克,注意坐标之间的转换即可,以下类似不再一一解释
- oCxt.fillRect(x+10,y+23,50,44);
- oCxt.fillStyle = "#FCB827";
- oCxt.beginPath();
- oCxt.arc(x+35,y+45,16,0,2*Math.PI,false);
- oCxt.closePath();
- oCxt.fill();
- oCxt.strokeStyle = "#FCB827";
- oCxt.lineWidth = "8.0";
- oCxt.moveTo(x+35,y+45);
- oCxt.lineTo(x-25,y+45);
- oCxt.stroke();
- break;
- case "r":
- oCxt.fillStyle = "#542174";
- oCxt.fillRect(x,y,65,20); //和造向左的坦克类似,只要改动炮筒即可向右
- oCxt.fillRect(x,y+70,65,20);
- oCxt.fillRect(x+10,y+23,50,44);
- oCxt.fillStyle = "#FCB827";
- oCxt.beginPath();
- oCxt.arc(x+35,y+45,16,0,2*Math.PI,false);
- oCxt.closePath();
- oCxt.fill();
- oCxt.strokeStyle = "#FCB827";
- oCxt.lineWidth = "8.0";
- oCxt.moveTo(x+35,y+45);
- oCxt.lineTo(x+95,y+45);
- oCxt.stroke();
- }
- }
- //初始化一个对象myTank,用来存储一些属性和方法
- var myTank = {
- x : 350,
- y : 400,
- step : 3,
- direction : "u",
- turnUp : function(){
- if((myTank.y-25) >= 0){ //加判断条件防止开出边界
- myTank.y -= myTank.step;
- myTank.direction = "u";
- }
- },
- turnDown : function(){
- if((myTank.y+90) <= 500){
- myTank.y += myTank.step;
- myTank.direction = "d";
- }
- },
- turnLeft : function(){
- if((myTank.x-25) >= 0){
- myTank.x -= myTank.step;
- myTank.direction = "l";
- }
- },
- turnRight : function(){
- if((myTank.x+90) <= 800){
- myTank.x += myTank.step;
- myTank.direction = "r";
- }
- }
- };
- //先画一个坦克出来
- drawTank(myTank.x,myTank.y,myTank.direction); //一开始先造一个向上的出来
- //封装一个更新战场的函数
- function updateFloor(){
- oCxt.clearRect(0,0,800,500); //更新之前先清除画布
- drawTank(myTank.x,myTank.y,myTank.direction); //清除完之后重新造坦克,坦克要移动就必须实时地根据坐标重新来造
- }
- //设置一个间歇调用的函数,每隔100ms更新一下战场
- setInterval(function(){
- updateFloor();
- },100);
- //响应玩家的操作指令
- window.onkeydown = function(eve){
- switch(eve.keyCode){
- case 38:
- case 87:
- myTank.turnUp();
- break;
- case 40:
- case 83:
- myTank.turnDown();
- break;
- case 37:
- case 65:
- myTank.turnLeft();
- break;
- case 39:
- case 68:
- myTank.turnRight();
- }
- };
H5 canvas控制坦克移动2的更多相关文章
- H5 canvas控制坦克移动
接着上一篇(http://www.cnblogs.com/zhouhuan/p/H5_tankgame.html),这一篇研究一下怎么响应玩家的操作让坦克进行相应的移动. 1. 了解keydown ...
- H5 canvas绘制出现模糊的问题
在之前做移动端小游戏幸运转盘.九宫格转盘,使用到了 canvas ,也是第一次在项目中使用 canvas 来实现. 近期测试人员反应 canvas 绘制的内容太模糊,心想着用 canvas 绘制出来的 ...
- h5 canvas 小球移动
h5 canvas 小球移动 <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...
- h5 canvas 画图
h5 canvas 画图 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...
- H5 canvas建造敌人坦克
接着上一篇(http://www.cnblogs.com/zhouhuan/p/H5_tankgame3.html),这一篇建造敌人的坦克. 思路是,基于可扩展性和性能等方面的考虑,用构造函数改造 ...
- 使用H5 canvas画一个坦克
具体步骤如下: 1. 首先做出绘图区,作为坦克的战场 <canvas id="floor" width="800px" height=&quo ...
- H5坦克大战之【玩家控制坦克移动2】
周一没有看圣诞大战,这几天比较忙也没有看赛后的报道,今天就先不扯NBA,随便扯扯自己.昨天在电脑里找东西的时候翻到以前兼职健身教练时的照片,思绪一下子回到学生时代,脑子久久换不过来.现在深深觉得健身和 ...
- H5坦克大战之【玩家控制坦克移动】
自从威少砍下45+11+11的大号三双之后,网上出现了各种各样的神级段子,有一条是这样的: 威少:Hey,哥们,最近过得咋样! 浓眉:对方开启了好友验证,请先添加对方为好友 威少:...... JRS ...
- H5 canvas 绘图
H5的canvas绘图技术 canvas元素是HTML5中新添加的一个元素,该元素是HTML5中的一个亮点.Canvas元素就像一块画布,通过该元素自带的API结合JavaScript代码可以绘制 ...
随机推荐
- mysql常见的错误码
Mysql错误代码 Mysql错误代码分为两部分,老版本一部分,4.1版本为新的部分 第一部分: mysql的出错代码表,根据mysql的头文件mysql/include/mysqld_error.h ...
- MacBook Pro Retina 安装WIN7 - 对抗模糊及其它
最近对虚拟机里的WIN7受够了,把整个虚拟机都删了,准备装双系统. 安装过程还是很简单的,网上教程一大堆,就是通过MAC OS X自带的BootCamp工具来管理整个安装过程,我是用外置光驱安装的,没 ...
- pta习题集5-16 地下迷宫探索
地道战是在抗日战争时期,在华北平原上抗日军民利用地道打击日本侵略者的作战方式.地道网是房连房.街连街.村连村的地下工事,如下图所示. 我们在回顾前辈们艰苦卓绝的战争生活的同时,真心钦佩他们的聪明才智. ...
- Code Forces 149DColoring Brackets(区间DP)
Coloring Brackets time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- CH1301 邻值查找【set应用】
1301 邻值查找 0x10「基本数据结构」例题 描述 给定一个长度为 n 的序列 A,A 中的数各不相同.对于 A 中的每一个数 A_i,求:min(1≤j<i) |A_i-A_j|以及令上 ...
- 如何在chrome上开启WebGL功能和判断目前浏览器是否支持
1.开启方式: 第一种:打开cmd,切换到Chorme的安装目录,敲入chrome.exe --enable -webgl,回车就会打开一个chrome浏览器窗口: 第二种:找到Chrome浏 ...
- redis cluster 集群畅谈(三) 之 水平扩容、slave自动化迁移
上一篇http://www.cnblogs.com/qinyujie/p/9029522.html, 主要讲解 实验多master写入.读写分离.实验自动故障切换(高可用性),那么本篇我们就来聊了聊r ...
- django如何防止csrf(跨站请求伪造)
什么是CSRF 下面这张图片说明了CSRF的攻击原理: Django中如何防范CSRF Django使用专门的中间件(CsrfMiddleware)来进行CSRF防护.具体的原理如下: 1.它修改当前 ...
- 大话https演化过程(对称加密、非对称加密、公钥、私钥、数字签名、数字证书)
大话https演化过程(包括概念:对称加密.非对称加密.公钥.私钥.数字签名.数字证书.https访问全过程) 在网络上发送数据是非常不安全的,非常容易被劫持或是被篡改,所以每次定向发送数据你都可 ...
- 设置XShell快捷键 复制粘贴 并禁用智能选择
设置XShell快捷键 复制粘贴 并禁用智能选择 1打开选项 2键盘和鼠标->打开编辑 3新建 组合键 Ctrl+C 类型:菜单 ->操作 [编辑]复制 [编辑]粘贴 4选中 ctrl+ ...