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 相关文章推荐
js自执行函数的几种不同写法的比较
Aug 16 Javascript
js实现两个值相加alert出来精确到指定位
Sep 25 Javascript
js使用数组判断提交数据是否存在相同数据
Nov 27 Javascript
JavaScript字符串对象toLowerCase方法入门实例(用于把字母转换为小写)
Oct 17 Javascript
修改或扩展jQuery原生方法的代码实例
Jan 13 Javascript
浅谈javascript中this在事件中的应用
Feb 15 Javascript
浅谈JavaScript中的字符编码转换问题
Jul 07 Javascript
15个非常实用的JavaScript代码片段
Dec 18 Javascript
微信小程序 两种为对象属性赋值的方式详解
Feb 23 Javascript
微信小程序在其他页面监听globalData中值的变化
Jul 15 Javascript
javascript实现超好看的3D烟花特效
Jan 01 Javascript
Javascript模块化机制实现原理详解
Apr 02 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设计模式之解释器模式的深入解析
2013/06/13 PHP
mantis安装、配置和使用中的问题小结
2014/07/14 PHP
php+mysqli实现批量替换数据库表前缀的方法
2014/12/29 PHP
PHP实现HTML页面静态化的方法
2015/11/04 PHP
基于jquery的点击链接插入链接内容的代码
2012/07/31 Javascript
jquery.Ajax()方法调用Asp.Net后台的方法解析
2014/02/13 Javascript
JavaScript下的时间格式处理函数Date.prototype.format
2016/01/27 Javascript
javascript iframe跨域详解
2016/10/26 Javascript
AngularJS之ionic 框架下实现 Localstorage本地存储
2017/04/22 Javascript
[js高手之路]从原型链开始图解继承到组合继承的产生详解
2017/08/28 Javascript
解决vue中对象属性改变视图不更新的问题
2018/02/23 Javascript
移动端自适应flexible.js的使用方法(不用三大框架,仅写一个单html页面使用)推荐
2019/04/02 Javascript
产制造追溯系统之通过微信小程序实现移动端报表平台
2019/06/03 Javascript
基于vue实现圆形菜单栏组件
2019/07/05 Javascript
vue实现页面滚动到底部刷新
2019/08/16 Javascript
Layui Table js 模拟选中checkbox的例子
2019/09/03 Javascript
JavaScript进制转换实现方法解析
2020/01/18 Javascript
JavaScript实现放大镜效果代码示例
2020/04/29 Javascript
Vue-cli4 配置 element-ui 按需引入操作
2020/09/11 Javascript
Vue绑定用户接口实现代码示例
2020/11/04 Javascript
Django数据库连接丢失问题的解决方法
2018/12/29 Python
python实现批量注册网站用户的示例
2019/02/22 Python
Django框架反向解析操作详解
2019/11/28 Python
opencv python图像梯度实例详解
2020/02/04 Python
Tensorflow 定义变量,函数,数值计算等名字的更新方式
2020/02/10 Python
python在一个范围内取随机数的简单实例
2020/08/16 Python
新秀丽拉杆箱美国官方网站:Samsonite美国
2016/07/25 全球购物
惠普墨西哥官方商店:HP墨西哥
2016/12/01 全球购物
美国顶级防滑鞋:Shoes For Crews
2017/03/27 全球购物
基于Python 函数和方法的区别说明
2021/03/24 Python
如何写求职信
2014/05/24 职场文书
共产党员岗位承诺书
2014/05/29 职场文书
公证委托书
2014/08/01 职场文书
工商局领导班子存在的问题整改措施思想汇报
2014/10/05 职场文书
医院见习总结
2015/06/24 职场文书
Nginx如何配置Http、Https、WS、WSS的方法步骤
2021/05/11 Servers