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 相关文章推荐
jQuery学习笔记 更改jQuery对象
Sep 19 Javascript
浅析showModalDialog数据缓存问题(用禁止浏览器缓存解决)
Jul 09 Javascript
jquery中的查找parents与closest方法之间的区别
Dec 02 Javascript
js遍历子节点子元素附属性及方法
Aug 19 Javascript
自己封装的常用javascript函数分享
Jan 07 Javascript
第四篇Bootstrap网格系统偏移列和嵌套列
Jun 21 Javascript
Js获取当前日期时间及格式化代码
Sep 17 Javascript
微信小程序 生命周期详解
Oct 12 Javascript
讲解vue-router之什么是嵌套路由
May 28 Javascript
MVVM框架下实现分页功能示例
Jun 14 Javascript
layUI的验证码功能及校验实例
Oct 25 Javascript
使用纯前端JavaScript实现Excel导入导出方法过程详解
Aug 07 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
松下Panasonic RF-B65电路分析
2021/03/02 无线电
PHP模板引擎Smarty内建函数详解
2016/04/11 PHP
JavaScript 对象模型 执行模型
2010/10/15 Javascript
提交表单时执行func方法实现代码
2013/03/17 Javascript
JS字符串截取函数实例
2013/12/27 Javascript
ActiveX控件与Javascript之间的交互示例
2014/06/04 Javascript
JavaScript将字符串转换成字符编码列表的方法
2015/03/19 Javascript
Javascript中for循环语句的几种写法总结对比
2017/01/23 Javascript
Bootstrap标签页(Tab)插件使用方法
2017/03/21 Javascript
JS实现去除数组中重复json的方法示例
2017/12/21 Javascript
使用canvas实现一个vue弹幕组件功能
2018/11/30 Javascript
在Vue中使用icon 字体图标的方法
2019/06/14 Javascript
JavaScript基于面向对象实现的无缝滚动轮播示例
2020/01/17 Javascript
Vue3新特性之在Composition API中使用CSS Modules
2020/07/13 Javascript
快速解决vue2+vue-cli3项目ie兼容的问题
2020/11/17 Vue.js
Python实现动态添加类的属性或成员函数的解决方法
2014/07/16 Python
Python实现的Excel文件读写类
2015/07/30 Python
python开发之thread线程基础实例入门
2015/11/11 Python
Python 详解基本语法_函数_返回值
2017/01/22 Python
Python数据结构之双向链表的定义与使用方法示例
2018/01/16 Python
Django框架模板介绍
2019/01/15 Python
Python中new方法的详解
2019/01/15 Python
Python3中编码与解码之Unicode与bytes的讲解
2019/02/28 Python
使用Python和Scribus创建一个RGB立方体的方法
2019/07/17 Python
cProfile Python性能分析工具使用详解
2019/07/22 Python
python+adb命令实现自动刷视频脚本案例
2020/04/23 Python
有影响力的品牌之家:Our Social Collective
2019/06/08 全球购物
Deux par Deux官方网站:设计师童装
2020/01/03 全球购物
什么叫应用程序域?什么是受管制的代码?什么是强类型系统?什么是装箱和拆箱?
2016/08/13 面试题
哈理工毕业生的求职信
2013/12/22 职场文书
九九重阳节标语
2014/10/07 职场文书
2015羊年春节慰问信
2015/02/14 职场文书
工商局个人工作总结
2015/03/03 职场文书
优秀大学生自荐信
2015/03/26 职场文书
奖金申请报告模板
2015/05/15 职场文书
Redis中key的过期删除策略和内存淘汰机制
2022/04/12 Redis