H5 canvas控制坦克移动
window.onkeydown = function(){alert("Merry Christmas!"); };
window.onkeydown = function(eve){alert(eve.keyCode); };
window.onkeydown = function(eve){alert("所按键对应的键码是: " + eve.keyCode); };
window.onkeydown = function(eve){ if(eve.keyCode == 38 || eve.keyCode == 87){alert("上");}else if(eve.keyCode == 40 || eve.keyCode == 83){alert("下");}else if(eve.keyCode == 37 || eve.keyCode == 65){alert("左");}else if(eve.keyCode == 39 || eve.keyCode == 68){alert("右");} };
window.onkeydown = function(eve){ switch(eve.keyCode){case 38:case 87:alert("上");break;case 40:case 83:alert("下");break;case 37:case 65:alert("左");break;case 39:case 68:alert("右");} };
function drawTank(x,y){var myCanvas = document.getElementById('floor');var cxt = myCanvas.getContext('2d');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(); }
drawTank(150,200); //以(150,200)的点为坦克的左上角(左边履带的左上角)造一个坦克
var myCanvas = document.getElementById('floor'); var cxt = myCanvas.getContext('2d'); cxt.fillStyle = "orange"; cxt.fillRect(50,50,300,80);
得到:
cxt.clearRect(0,0,800,500);
//封装一个获取绘图环境的函数 function getCxt(){var myCanvas = document.getElementById('floor'),myContext = myCanvas.getContext('2d');return myContext; }//封装一个画坦克的函数,传两个参数x,y,分别代表左上角的横纵坐标 function drawTank(x,y){var cxt = getCxt();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(); }//初始化一个对象myTank,用来存储一些属性和方法 var myTank = {}; myTank.x = 350; myTank.y = 400; myTank.step = 3; //设置步长,步长越大那么坦克运动的速度越快//先画一个坦克出来 drawTank(myTank.x,myTank.y);//封装一个更新战场的函数 function updateFloor(){var cxt = getCxt();cxt.clearRect(0,0,800,500); //更新之前先清除画布drawTank(myTank.x,myTank.y); //清除完之后重新造坦克,坦克要移动就必须实时地根据坐标重新来造 }//设置一个间歇调用的函数,每隔100ms更新一下战场 setInterval(function(){updateFloor(); },100);//响应玩家的操作指令 window.onkeydown = function(eve){ switch(eve.keyCode){case 38:case 87:myTank.y -= myTank.step; //Y坐标减小向上移动break;case 40:case 83:myTank.y += myTank.step; //Y坐标增加向下移动break;case 37:case 65:myTank.x -= myTank.step; //X坐标减小向左移动break;case 39:case 68:myTank.x += myTank.step; //X坐标增加向右移动 } };
转载于:https://www.cnblogs.com/zhouhuan/p/H5_tankgame2.html
H5 canvas控制坦克移动相关推荐
- [初学]H5+PHP 在线坦克开发日记
着手开始写原计划php小组项目的网络坦克对战.当时决定做游戏的原因是猫哥有h5开发能力,但现在自己做,自己要去学h5的东西.现在记录下学习和开发的过程. 2016.7.26 实现了坦克在空白地图上的移 ...
- h5 Canvas矩形的绘制
h5 Canvas矩形的绘制 1.绘制矩形api 在Canvas中提供了绘制矩形的API: fillRect(x, y, width, height):绘制一个填充的矩形 strokeRect(x, ...
- H5 Canvas下雨特效
模仿下雨的特效,雨点从空中随机飘落. 这个特效使用了H5的新特性Canvas. 效果演示 代码展示 body代码 <!DOCTYPE html> <html lang="e ...
- matlab控制树莓派3b,树莓派3B+ 手机h5网页控制GPIO
ezgif-4-5d181e9b42.gif 本文介绍如何在H5页面控制树莓派GPIO 仅实现以BCM编码方式控制GPIO,其他方式未做. 演示地址:http://gpio.exmll.cn/ 点击B ...
- html验证码图片,js+h5 canvas实现图片验证码
本文实例为大家分享了js+h5 canvas实现图片验证码的具体代码,供大家参考,具体内容如下 实现效果 一.使用技术 原生js技术+html5 canvas画图 利用Math.random()函数随 ...
- H5 Canvas实现荣誉证书生成器
H5 Canvas实现荣誉证书生成器 没人跟我颁奖,那就自己给自己颁一个吧~ 预览 在线链接 https://linyisonger.github.io/H5/22.证书生成器.html 源码地址 h ...
- H5 Canvas绘制三角函数图像
三角函数sin.cos.tan.sinh.cosh.tanh js 的Math库,自带了许多常见函数方法,其中关于 三角函数的求解还是很齐全的,于是想到,利用canvas 绘制一个比较准确的 sin. ...
- 用H5 canvas实现唯美渐变色块的绘制
随着Web前端的不断发展,我们已经可以使用H5+js+css做出很多复杂而优美的视觉效果.一幕幕的视觉盛宴背后是网页设计人员精巧的构思和前端开发人员的精湛技能.今天我们来讲述一下简单H5 canvas ...
- 绘制六芒星战斗力属性图 —— h5 canvas 初体验
在黄金的沙滩上 安息着远古的悲剧 在深绿的波涌中 停着灵魂的船 --<眼睛>,顾城 最近用MUI做Web app时想实现一个六芒星战斗力图的(类似LPL赛前战队实力分析图)效果,由于正多边 ...
最新文章
- jenkins 发送邮件插件Email Extension Template Plugin配置及script pipeline完整脚本
- Redis的两种持久化机制RDB和AOF
- SpringSecurity权限控制之异常处理方式二
- [vue-element] 你有二次封装过ElementUI组件吗?
- oracle怎么删除存储,删除Oracle分区存储是一个怎样的过程?
- r如何查询mysql中的数据类型_MySQL-mysql中的数据类型
- 图说可视化,报表也能做得如此酷炫!
- 死磕 18 个 Java 8 的日期处理,工作必用!
- numpy-np.concatenate
- Pandas系列(九)axis参数理解
- 03月11日单应矩阵与鸟瞰图IPM变换
- C# 调用dll文件
- java snakeyaml_JAVA基于SnakeYAML实现解析与序列化YAML
- 抖音怎样做伪原创视频 抖音短视频去水印之后怎么保存
- 吾生也有涯,而知也无涯,以有涯随无涯,殆己
- seo与sem的关系和区别
- 计算机硬件和软件英语,计算机组成与设计:硬件/软件接口(英文版 原书第5版 ARM版)...
- 【神经网络务实:Deepin Linux 安装使用yolov5】
- 项目管理领域关键知识点之横道图和网络图
- 伤疤好了有黑印怎么办_疤痕留下黑印怎么办 不妨试试这四种方法
热门文章
- Jquery结合Ctrl和Shift键,快速多选与反选
- 你不知道的哪些办公软件?
- Django 高并发负载均衡
- 1688接入千牛 帮阿里商家发现全球供货“水源”
- 动易html在线编辑器 漏洞,动易上传漏洞1小时狂拿50个WEBSHELL
- android端字体颜色,Android状态字体颜色
- 众人见打死了白秀英 水浒传
- 永恒火焰(全3册)读后感
- failed to allocate 2.00G (2147483648 bytes) from device: CUDA_ERROR_OUT_OF_MEMORY: out of memory
- 计算机新型应用技术,一种新型计算机的制作方法