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 相关文章推荐
采用call方式实现js继承
May 20 Javascript
js 数组去重的四种实用方法
Sep 09 Javascript
JS动态加载当前时间的方法
Feb 09 Javascript
如何编写高质量JS代码(续)
Feb 25 Javascript
jQuery Validate初步体验(二)
Dec 12 Javascript
jQuery点击其他地方时菜单消失的实现方法
Apr 22 Javascript
jQuery中借助deferred来请求及判断AJAX加载的实例讲解
May 24 Javascript
详解JS中定时器setInterval和setTImeout的this指向问题
Jan 06 Javascript
js设计模式之代理模式及订阅发布模式实例详解
Aug 15 Javascript
react-native聊天室|RN版聊天App仿微信实例|RN仿微信界面
Nov 12 Javascript
webpack DllPlugin xxx is not defined解决办法
Dec 13 Javascript
WebStorm无法正确识别Vue3组合式API的解决方案
Feb 18 Vue.js
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中的Session和Cookie
2013/06/21 PHP
解析argc argv在php中的应用
2013/06/24 PHP
php树型类实例
2014/12/05 PHP
php socket通信简单实现
2016/11/18 PHP
ThinkPHP实现附件上传功能
2017/04/27 PHP
PHP基于Closure类创建匿名函数的方法详解
2017/08/17 PHP
TP5框架实现的数据库备份功能示例
2020/04/05 PHP
Javascript 匿名函数及其代码模式原理
2010/03/19 Javascript
js字符串的各种格式的转换 ToString,Format
2011/08/08 Javascript
js动画(animate)简单引擎代码示例
2012/12/04 Javascript
jquery分页插件jquery.pagination.js实现无刷新分页
2016/04/01 Javascript
BootStrap响应式导航条实例介绍
2016/05/06 Javascript
jQuery hover事件简单实现同时绑定2个方法
2016/06/07 Javascript
基于canvas的二维码邀请函生成插件
2017/02/14 Javascript
Vue2.0 组件传值通讯的示例代码
2017/08/01 Javascript
在 Typescript 中使用可被复用的 Vue Mixin功能
2018/04/17 Javascript
关于vue v-for 循环问题(一行显示四个,每一行的最右边那个计算属性)
2018/09/04 Javascript
Python3访问并下载网页内容的方法
2015/07/28 Python
python实现播放音频和录音功能示例代码
2018/12/30 Python
Python安装Flask环境及简单应用示例
2019/05/03 Python
TensorFlow 多元函数的极值实例
2020/02/10 Python
Python sklearn库实现PCA教程(以鸢尾花分类为例)
2020/02/24 Python
python实现井字棋小游戏
2020/03/04 Python
全球知名旅游社区法国站点:TripAdvisor法国
2016/08/03 全球购物
Oral-B荷兰:牙医最推荐的品牌
2020/02/25 全球购物
计算机本科生自荐信
2013/10/15 职场文书
少先队学雷锋活动总结范文
2014/03/09 职场文书
超市促销活动总结
2014/07/01 职场文书
党的群众路线教育实践活动个人批评与自我批评
2014/10/16 职场文书
2014年企业党建工作总结
2014/12/18 职场文书
北京英语导游词
2015/02/12 职场文书
奖励申请报告范文
2015/05/15 职场文书
九九重阳节致辞
2015/07/31 职场文书
HTML+CSS制作心跳特效的实现
2021/05/26 HTML / CSS
MySql子查询IN的执行和优化的实现
2021/08/02 MySQL
《杜鹃的婚约》OP主题曲「凸凹」无字幕影像公开
2022/04/08 日漫