键盘方向键控制人物上下左右行走

演示地址

点击打开链接

MYCode

<html>
<head>
<meta charset=utf-8>
<title>html5人物行走</title>
<script>
var canvas;
var ctx; //role
var role_x=50;
var role_y=50;
var role_width=32;
var role_height=48;
//每个方向有4个状态
role_direction=0;//value[0,3];
role_status=0;//value[0,3];
//box
var box_x=0;
var box_y=0;
var box_width=400;
var box_height=400;
//
var bound_left=0;
var bound_right=box_x+box_width-role_width;
var bound_top=0;
var bound_bottom=box_y+box_height-role_height; var unit=10; function draw_role()
{
ctx.clearRect(box_x,box_y,box_width,box_height);
ctx.lineWidth="5";
ctx.strokeStyle="rgb(0,0,0)";
ctx.beginPath();
ctx.strokeRect(box_x,box_y,box_width,box_height);
/*var img=new Image();
img.src="role.png";
ctx.drawImage(img,role_direction*role_height,role_status*role_width,role_width,role_height);*/
var img=new Image();
img.src="role.png";
img.onload=function()
{
//ctx.drawImage(img,0,0,role_width,role_height);
//alert(role_x+","+role_y);
ctx.drawImage(img,role_status*role_width,role_direction*role_height,role_width,role_height,role_x,role_y,role_width,role_height);
};
}
function move_role(event)
{
//鼠标点击移动
/*var mx;
var my;
if(ev.layerX||ev.layerX==0)
{
mx=ev.layerX;
my=ev.layerY;
}
else if(ev.offsetX||ev.offsetX==0)
{
mx=ev.offsetX;
my=ev.offsetY;
}*/
var keyCode;
if(event==null)
{
keyCode=window.event.keyCode;
window.event.preventDefault();
}
else
{
keyCode=event.keyCode;
event.preventDefault();
}
var cur_direction;
switch(keyCode)
{
case 37://left
cur_direction=1;
role_x=role_x-unit;
if(role_x<bound_left)
role_x=bound_left;
break;
case 38://up
cur_direction=3;
role_y=role_y-unit;
if(role_y<bound_top)
role_y=bound_top;
break;
case 39://right
cur_direction=2;
role_x=role_x+unit;
if(role_x>bound_right)
role_x=bound_right;
break;
case 40://down
cur_direction=0;
role_y=role_y+unit;
if(role_y>bound_bottom)
role_y=bound_bottom;
break;
default:
break;
}
if(role_direction==cur_direction)
{
role_status=(role_status+1)%4;
}
else
{
role_direction=cur_direction;
role_status=0;
}
draw_role();
}
/*function animate(now)
{
draw_role();
requestAnimationFrame(animate);
}*/
function init()
{ canvas=document.getElementById("canvas");
ctx=canvas.getContext('2d');
window.addEventListener('keydown',move_role,false);
ctx.clearRect(box_x,box_y,box_width,box_height);
ctx.save();
ctx.lineWidth="5";
ctx.strokeStyle="rgb(0,0,0)";
ctx.beginPath();
ctx.strokeRect(box_x,box_y,box_width,box_height);
draw_role();
ctx.restore();
//setInterval(draw_role,1000);
//setInterval(function (e){animate();},1000/60);
//requestAnimationFrame(animate);
}
</script>
</head>
<body onLoad="init();">
<canvas id="canvas" width="500" height="500"/>
</body>
</html>

人物行走图片

不足之处

如果连续按住方向键,人物行走的动画将会出现闪烁。这个问题没有解决。

html5 人物行走的更多相关文章

  1. 8款超酷的HTML5 3D图片动画源码

    1.HTML5移动端图片左右切换动画 今天要给大家分享一款很不错的图片左右切换焦点图动画,并且支持移动端触摸滑动.功能上,这款HTML5图片播放器支持鼠标滑动.手机端触摸滑动以及自动播放.外观上,这款 ...

  2. 精选7款绚丽的HTML5和jQuery图片动画特效

    在HTML5出现后,图片就变得更加富有动感了,各种图片动画特效也层出不穷,例如图片播放器.图片导航.3D图片动画等等.本文将精选几款具有代表性的HTML5和jQuery图片动画特效,绚丽的画面.实用的 ...

  3. 分享12款经典时尚的HTML5应用

    分享伟大,呵呵.今天给大家分享一下收集的12个HTML5小特效. 我整理一下源码,给大家打包一下,我博客园上传文件大小有限,传不了了. 需要的请留下邮箱就行了,觉得好的话,不要忘了点赞哦~ 1.CSS ...

  4. HTML5资源教程

    新款CSS3按钮组合 5组可爱CSS3按钮 Leave a reply 之前我分享过一些时尚的CSS3动画按钮,比如CSS3渲染Checkbox实现3D开关切换按钮.纯CSS3 3D按钮 按钮酷似牛奶 ...

  5. 分享9款最新超酷HTML5/CSS3应用插件

    新的一周开始了,小编继续要为大家分享实用超酷的HTML5应用,今天分享的这9款最新HTML5/CSS3应用你一定会很喜欢,一起来看看. 1.HTML5 Canvas模拟衣服撕扯动画 超级逼真 今天又要 ...

  6. html5游戏开发-零基础开发《圣诞老人送礼物》小游戏

    开言: 以前lufy前辈写过叫“ HTML5游戏开发-零基础开发RPG游戏”的系列文章,在那里面我学习了他的引擎以及了解了游戏脚本.自从看了那几篇文章,我便对游戏开发有了基本的认识.今天我也以零基础为 ...

  7. 『HTML5挑战经典』是英雄就下100层-开源讲座(一)从天而降的英雄

    是英雄就下100层是一款经典的手机小游戏,以前是在诺基亚手机上十分有名.今天我们就用HTML5和lufylegend一步步地实现它. 一,准备工作 首先,你需要下载lufylegend,下载地址如下: ...

  8. 用仿ActionScript的语法来编写html5——第三篇,鼠标事件与游戏人物移动

    第三篇,鼠标事件与游戏人物移动 一,假设假设,所有可添加鼠标事件的对象,都有一个mouseEvent方法,添加的鼠标事件同过这个mouseEvent来调用.这样的话,添加鼠标事件,其实只需要给canv ...

  9. 使用HTML5制作简单的RPG游戏

    很久以前就想着做一个游戏,但什么都不会又不知道从哪里开始,胡乱找来一些书籍和资料结果太深奥看不懂,无奈只能放弃.这一弃就是十多年,倥偬半生,眼看垂垂老矣,还是没能有什么成果. 近年来游戏引擎越来越多, ...

随机推荐

  1. REUSEADDR 选项

    一般而言,对于处理2MSL状态的套接字(一般为服务端套接字)是不允许接受从同一客户端重新发起一个新的连接的,但是套接字编程系统接口允许应用程序通过设置一个REUSEADDR选项,使处于2MSL状态的套 ...

  2. c语言复杂声明解析

    这是个好东西,接触c语言好几年了,第一次看到这东西,惊喜万分. 先提供个分析案例,以后看方便 vector <int> * (*seq_array[]) (int )={func1,fun ...

  3. C#备份还原MySql数据库

    原文:C#备份还原MySql数据库 项目结束,粘点代码出来让Google或Baidu一下,原因是现在还搜不到这么现成的 调用MySql的工具mysqldump来实现. 类Cmd来实现调用cmd命令, ...

  4. 于CentOS 6 安装 Wordpress

    1.两种方式给Wordpress 首先,你可以去wordpress最新的官方网站看看wordpress多少下载.例wordpress 3.9.1下载地址: http://cn.wordpress.or ...

  5. Cocos2d-x 3.0final 终结者系列教程12-Vector&amp;map&amp;value

    北京时间昨天下午,温40度.中午12:16我来到了篮球场点.思维1分钟决定开站 转球: 我和另一个3队友半开始, 我手中的球的那一刻我突然火爆球不稳,突然问,淡淡的味道橡胶和烧烤的味道混合. 个腾空跳 ...

  6. 谈谈那些年PHP中屌屌的验证码

    验证码已经是现在网站中非常基础的知识点了,验证码的存在可以防止恶意破解密码.刷票.灌水,可以有效的防止暴力破解特定用户. 现在就来了解了解那些年PHP中屌屌的验证码吧. 首先,以四位验证码为例(多位验 ...

  7. php操作xml并插入到数据库中

    php操作xml并插入到数据库中 <? php header('content-type:text/html;charset=utf-8'); mysql_connect('localhost' ...

  8. Android接口测试-JUnit入门

    1.下载:http://www.junit.org 2.配置AndroidManifest.xml,在application节点加入 <!--使用单元测试库-->        <u ...

  9. sudo找不到npm的解决办法及及使用cnpm加速[已解决]

    sudo ln -s /usr/local/bin/node /usr/bin/node sudo ln -s /usr/local/lib/node /usr/lib/node sudo ln -s ...

  10. Asterisk 未来之路3.0_0005

    原文:Asterisk 未来之路3.0_0005 第二章: Asterisk的架构   Asterisk 和其他众多传统的PBX是有区别的,拨号方案针对各种通道处理本质上采用同一种方式. 在传统的PB ...