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中校验时间格式的正则表达式小结
Sep 22 Javascript
原生js ActiveXObject获取execl里面的值
Nov 01 Javascript
jquery和雅虎的yql服务实现天气预报服务示例
Feb 08 Javascript
jQuery修改li下的样式以及li下的img的src的值的方法
Nov 02 Javascript
javascript中数组的定义及使用实例
Jan 21 Javascript
vue.js 使用v-if v-else发现没有执行解决办法
May 15 Javascript
Vue-cli proxyTable 解决开发环境的跨域问题详解
May 18 Javascript
详解从angular-cli:1.0.0-beta.28.3升级到@angular/cli:1.0.0
May 22 Javascript
vue 实现复制内容到粘贴板clipboard的方法
Mar 17 Javascript
微信小程序实现批量倒计时功能
Nov 01 Javascript
浅谈Vue中render中的h箭头函数
Nov 07 Javascript
JS+CSS实现动态时钟
Feb 19 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加速的eAccelerator dll支持文件打包下载
2007/09/30 PHP
学习discuz php 引入文件的方法DISCUZ_ROOT
2009/06/21 PHP
编译php 5.2.14+fpm+memcached(具体操作详解)
2013/06/18 PHP
在Nginx上部署ThinkPHP项目教程
2015/02/02 PHP
神奇的代码 通杀各种网站-可随意修改复制页面内容
2008/07/17 Javascript
Prototype Array对象 学习
2009/07/19 Javascript
基于jquery完美拖拽,可返回拖动轨迹
2012/03/29 Javascript
js获取height和width的方法说明
2013/01/06 Javascript
javascript结合ajax读取txt文件内容
2014/12/05 Javascript
easyui Draggable组件实现拖动效果
2015/08/19 Javascript
Javascript中将变量转换为字符串的三种方法
2017/09/19 Javascript
详解Vue中watch的高级用法
2018/05/02 Javascript
JS面向对象的程序设计相关知识小结
2018/05/26 Javascript
在vue.js中使用JSZip实现在前端解压文件的方法
2018/09/05 Javascript
Vue 使用计时器实现跑马灯效果的实例代码
2019/07/11 Javascript
微信小程序实现禁止分享代码实例
2019/10/19 Javascript
VUE 实现element upload上传图片到阿里云
2020/08/12 Javascript
Python3读取Excel数据存入MySQL的方法
2018/05/04 Python
超简单使用Python换脸实例
2019/03/27 Python
在django中,关于session的通用设置方法
2019/08/06 Python
opencv-python 读取图像并转换颜色空间实例
2019/12/09 Python
python pip安装包出现:Failed building wheel for xxx错误的解决
2019/12/25 Python
pytorch 自定义参数不更新方式
2020/01/06 Python
python opencv角点检测连线功能的实现代码
2020/11/24 Python
详解CSS3中使用gradient实现渐变效果的方法
2015/08/18 HTML / CSS
英国电动工具购买网站:Anglia Tool Centre
2017/04/25 全球购物
纽约海:Sea New York
2018/11/04 全球购物
BIFFI美国站:意大利BIFFI BOUTIQUES豪华多品牌时装零售公司
2020/02/11 全球购物
中国京东和泰国中央集团合资的网站:JD CENTRAL
2020/08/22 全球购物
Shell如何接收变量输入
2016/08/06 面试题
代办委托书怎样写
2014/04/08 职场文书
四风问题原因分析及整改措施
2014/10/24 职场文书
Ajax实现局部刷新的方法实例
2021/03/31 Javascript
Html5通过数据流方式播放视频的实现
2021/04/27 HTML / CSS
redis三种高可用方式部署的实现
2021/05/11 Redis
mysql升级到5.7时,wordpress导数据报错1067的问题
2021/05/27 MySQL