js键盘事件实现人物的行走


Posted in Javascript onJanuary 17, 2020

本文实例为大家分享了js键盘事件实现人物行走的具体代码,供大家参考,具体内容如下

描述:

小时候喜欢玩的一个游戏,魔塔,实现了人物的行走,以及跳跃,当然是2D的效果。

用到的图:

js键盘事件实现人物的行走

效果:

js键盘事件实现人物的行走

代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    html
    {
      background-color: deepskyblue;
    }
    div
    {
      width: 32px;
      height: 32px;
      background-image: url("img/Actor01-Braver03.png");
      position: absolute;
    }
  </style>
</head>
<body>
  <div></div>
  <script>
    var key=0;
    var bool=false;
    var speed=2;//每次行走的距离
    var actor;//人物div
    const HEIGHT=33;//人物的高
    const WIDTH=32;//人物的宽
    var arr=[1,3,2,0];//4排图像 代表 下 左 右 上
    var num=0;
    var jumpBool=false;
    var actorSkinSpeed=8;
    var jumpSpeed=-15;
    init();
    function init() {
      window.addEventListener("keydown",keyHandler);
      window.addEventListener("keyup",keyHandler);
      actor=document.querySelector("div");
      setInterval(animation,16);
      //按键驱动不能实现 实现的是通过按键触发相应动画 实现我们的人物的帧动画 跳转
    }
    
    function keyHandler(e) {
      bool=e.type==="keydown";
      key=e.keyCode;
      if(!bool){
        num=0;
        actor.style.backgroundPositionX=-num*WIDTH+"px";
      }
      if(key===32 && !jumpBool){//跳跃 空格驱动
        jumpBool=true;
      }
    }
    
    function animation() {
      jump();
      if(!bool)return;
      walk();//单方向行走 实现
      changeDirection();//方向确定时 内部行走的实现
    }
    
    function jump() {
      if(!jumpBool)return;
      jumpSpeed+=1;
      if(jumpSpeed===15){
        jumpBool=false;
        jumpSpeed=-15;
        return;
      }
      actor.style.top=actor.offsetTop+jumpSpeed+"px";
    }
    
    function changeDirection() {
      actorSkinSpeed--;
      if(actorSkinSpeed>0) return;
      actorSkinSpeed=8;
      num++;
      if(num>3) num=0;
      actor.style.backgroundPositionX=-num*WIDTH+"px";
    }
 
    function walk() {
      switch (key){
        case 37://左 ×1 第二排
          actor.style.left=actor.offsetLeft-speed+"px";
          actor.style.backgroundPositionY=-arr[0]*HEIGHT+"px";
          break;
        case 38://上 ×3 第四排
          actor.style.top=actor.offsetTop-speed+"px";
          actor.style.backgroundPositionY=-arr[1]*HEIGHT+"px";
          break;
        case 39://右 ×2 第三排
          actor.style.left=actor.offsetLeft+speed+"px";
          actor.style.backgroundPositionY=-arr[2]*HEIGHT+"px";
          break;
        case 40://下 ×0 第一排
          actor.style.top=actor.offsetTop+speed+"px";
          actor.style.backgroundPositionY=-arr[3]*HEIGHT+"px";
          break;
 
      }
    }
  </script>
</body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
使用javascript实现json数据以csv格式下载
Jan 09 Javascript
jQuery实现带延迟效果的滑动菜单代码
Sep 02 Javascript
jquery html动态添加的元素绑定事件详解
May 24 Javascript
Javascript实现图片不间断滚动的代码
Jun 22 Javascript
jquery实现图片轮播器
May 23 jQuery
vue组件挂载到全局方法的示例代码
Aug 02 Javascript
浅析微信扫码登录原理(小结)
Oct 29 Javascript
react组件从搭建脚手架到在npm发布的步骤实现
Jan 09 Javascript
Vue模板语法中数据绑定的实例代码
May 17 Javascript
vue项目前端错误收集之sentry教程详解
May 27 Javascript
微信小程序工具函数封装
Oct 28 Javascript
vue等两个接口都返回结果再执行下一步的实例
Sep 08 Javascript
javascript实现简易的计算器
Jan 17 #Javascript
JavaScript简易计算器制作
Jan 17 #Javascript
vue下axios拦截器token刷新机制的实例代码
Jan 17 #Javascript
js布局实现单选按钮控件
Jan 17 #Javascript
vue 查看dist文件里的结构(多种方式)
Jan 17 #Javascript
JavaScript数组去重实现方法小结
Jan 17 #Javascript
JS面向对象之多选框实现
Jan 17 #Javascript
You might like
PHP 采集获取指定网址的内容
2010/01/05 PHP
PHP迭代器实现斐波纳契数列的函数
2013/11/12 PHP
yii2中使用Active Record模式的方法
2016/01/09 PHP
PHP Laravel 上传图片、文件等类封装
2017/08/16 PHP
JS下拉缓冲菜单示例代码
2013/08/30 Javascript
在JS中解析HTML字符串示例代码
2014/04/16 Javascript
对比分析AngularJS中的$http.post与jQuery.post的区别
2015/02/27 Javascript
JavaScript中解析JSON数据的三种方法
2015/07/03 Javascript
分享有关jQuery中animate、slide、fade等动画的连续触发、滞后反复执行的bug
2016/01/10 Javascript
input点击后placeholder中的提示消息消失
2016/01/15 Javascript
基于javascript实现精确到毫秒的倒计时限时抢购
2016/04/17 Javascript
React.js入门实例教程之创建hello world 的5种方式
2016/05/11 Javascript
JavaScript Ajax编程 应用篇
2016/07/02 Javascript
JavaScript 随机验证码的生成实例代码
2016/09/22 Javascript
基于jQuery的checkbox全选问题分析
2016/11/18 Javascript
vue2+el-menu实现路由跳转及当前项的设置方法实例
2017/11/07 Javascript
jQuery实现每隔一段时间自动更换样式的方法分析
2018/05/03 jQuery
Vue2.0中三种常用传值方式(父传子、子传父、非父子组件传值)
2018/08/16 Javascript
create-react-app安装出错问题解决方法
2018/09/04 Javascript
Angularjs之ngModel中的值验证绑定方法
2018/09/13 Javascript
Vue表单控件绑定图文详解
2019/02/11 Javascript
JS实现动态添加外部js、css到head标签的方法
2019/06/05 Javascript
一些可能会用到的Node.js面试题
2019/06/15 Javascript
Vue中el-form标签中的自定义el-select下拉框标签功能
2020/04/20 Javascript
将tensorflow.Variable中的某些元素取出组成一个新的矩阵示例
2020/01/04 Python
纪伊国屋泰国网上书店:Kinokuniya泰国
2017/12/24 全球购物
美国批发供应商:Kole Imports
2019/04/10 全球购物
惠普香港官方商店:HP香港
2019/04/30 全球购物
教师爱岗敬业演讲稿
2014/05/05 职场文书
会议欢迎词范文
2015/01/27 职场文书
男方婚前保证书
2015/02/28 职场文书
小学生表扬稿范文
2015/05/05 职场文书
宣传委员竞选稿
2015/11/19 职场文书
保险公司增员口号
2015/12/25 职场文书
导游词之井冈山
2019/11/20 职场文书
SQL优化老出错,那是你没弄明白MySQL解释计划用法
2021/11/27 MySQL