如何利用JavaScript编写一个格斗小游戏


Posted in Javascript onJanuary 06, 2021

拖延症晚期的我原本计划趁着周末写个年终总结,但是一直没有什么思路,想来想去也没想到要写啥就胡乱写了这么一个小东西。

一直比较痴迷游戏行业,可能我不太适合做前端,应该去学C++....

如何利用JavaScript编写一个格斗小游戏

首先当然是选择一张背景图,作为整个场景中的地图,而且要大要高清。布局到页面中。

如何利用JavaScript编写一个格斗小游戏

然后通过可视区值展示这张图片的一小部分。我这里用的是宽600,高420的,超出直接隐藏掉。

width: 600px;
height: 420px;

如何利用JavaScript编写一个格斗小游戏

这样一个简单的场景就写好了,接着我们需要在这个场景中加入我们的人物。也就是游戏中的角色。不过游戏贴图实在是太难了,我也没有时间自己去设计,所以直接在网上找了火柴人的gif好像是DNF的技能图,通过PS的处理,截取其中的几个重要动作,加入的到页面中。

如何利用JavaScript编写一个格斗小游戏

现在角色有了,地图也有了,我们应该让人物动起来了,我的做法是让人物固定在窗口的中心位置,当人物移动的时候通过移动背景来让人物看起来有动的效果。

所以我这里在监听键盘事件的时候做了两件事,第一是更换人物的贴图,让人物有动起来的姿势,第二是改变背景图的位置,看起来确实就是在跑。

如何利用JavaScript编写一个格斗小游戏

import Scene from './components/Scene';
import Games from './components/Games';
import Person from './components/Person';

const direct = { // 有效按键
 87: 'up',
 65: 'left',
 83: 'down',
 68: 'right',
 74: 'j',
 75: 'k',
 76: 'l',
 13: 'enter',
 27: 'esc'
}

const keys = []; // 当前按键

// 初始化窗口
const App = new Games();
const client = App.getEle();
// 初始化场景, 场景要放在窗口中
const scene = new Scene(bgi, client);
// 初始化人物,人物也要放在窗口中
const person = new Person({
 name: '隐冬',
 level: 1,
}, client)

// 监听按键
window.addEventListener('keydown', (e) => {
 const key = direct[e.keyCode];
 if (!keys.includes(key) && key) { // 有效按键
 keys.push(key);
 scene.move(keys); // 执行场景变换
 person.action(keys); // 切换人物动作
 }
})
// 监听按键
window.addEventListener('keyup', (e) => {
 const key = direct[e.keyCode];
 const idx = keys.indexOf(key);
 if (idx >= 0 && key) { // 有效按键
 keys.splice(idx, 1);
 scene.move(keys); // 执行场景变换
 person.action(keys); // 切换人物动作
 }
})

如何利用JavaScript编写一个格斗小游戏

然后这里加入血槽等级,人物名称,血量值。

如何利用JavaScript编写一个格斗小游戏

人物这里是一个class类,可以通过实例化的方式创建很多个人物,然后让他们满屏幕的乱跑,我这里通过实例化的时候判断人物是否是机器人,通过随机数的方式定义人物自己的动作。

如何利用JavaScript编写一个格斗小游戏

技能就比较难看了,也是网上随便找的效果图,看淡了,有就行要求别那么高。

如何利用JavaScript编写一个格斗小游戏

打斗也很简单,就是角色在放技能的时候计算周边其他的角色的距离,从而判定是否击中,然后让血量降低。公告系统,这些都有写,不过定时器太多造成了内存泄露我还得想想怎么优化一下。

如何利用JavaScript编写一个格斗小游戏

github地址分享给大家,感兴趣的同学可以自己写写,还挺有意思的,真的是越写越停不下来,我这是什么毛病。

自取链接

到此这篇关于如何利用JavaScript编写一个格斗小游戏的文章就介绍到这了,更多相关JavaScript写格斗小游戏内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
qq悬浮代码(兼容各个浏览器)
Jan 29 Javascript
js如何判断用户是在PC端和还是移动端访问
Apr 24 Javascript
Javascript动画的实现原理浅析
Mar 02 Javascript
浅谈document.write()输出样式
May 07 Javascript
jquery form表单获取内容以及绑定数据
Feb 24 Javascript
两种方法解决javascript url post 特殊字符转义 + & #
Apr 13 Javascript
使用ajaxfileupload.js实现上传文件功能
Aug 13 Javascript
Bootstrap中datetimepicker使用小结
Dec 28 Javascript
基于jQuery实现滚动刷新效果
Jan 09 Javascript
微信小程序 页面之间传参实例详解
Jan 13 Javascript
详解Vue组件实现tips的总结
Nov 01 Javascript
AngularJS中ng-options实现下拉列表的数据绑定方法
Aug 13 Javascript
vuex的使用步骤
Jan 06 #Vue.js
一篇文章看懂JavaScript中的回调
Jan 05 #Javascript
原生js中运算符及流程控制示例详解
Jan 05 #Javascript
vue3.0中友好使用antdv示例详解
Jan 05 #Vue.js
基于Vue2实现移动端图片上传、压缩、拖拽排序、拖拽删除功能
Jan 05 #Vue.js
在Angular项目使用socket.io实现通信的方法
Jan 05 #Javascript
利用JavaScript为句子加标题的3种方法示例
Jan 05 #Javascript
You might like
PHP中开发XML应用程序之基础篇 添加节点 删除节点 查询节点 查询节
2010/07/09 PHP
PHP基础学习小结
2011/04/17 PHP
PHP排序算法的复习和总结
2012/02/15 PHP
PHP中设置一个严格30分钟过期Session面试题的4种答案
2014/07/30 PHP
利用laravel+ajax实现文件上传功能方法示例
2017/08/13 PHP
thinkphp5.0自定义验证规则使用方法
2017/11/16 PHP
YUI 读码日记之 YAHOO.lang.is*
2008/03/22 Javascript
IE与firefox之jquery用法区别
2008/10/03 Javascript
javascript操作cookie_获取与修改代码
2009/05/21 Javascript
node.js使用nodemailer发送邮件实例
2014/03/10 Javascript
ECMAScript中函数function类型
2015/06/03 Javascript
AngularJS学习笔记之基本指令(init、repeat)
2015/06/16 Javascript
js常用DOM方法详解
2017/02/04 Javascript
JS简单实现点击按钮或文字显示遮罩层的方法
2017/04/27 Javascript
angular2中router路由跳转navigate的使用与刷新页面问题详解
2017/05/07 Javascript
浅谈通过JS拦截 pushState和replaceState事件
2017/07/21 Javascript
React实现全局组件的Toast轻提示效果
2018/09/21 Javascript
django中使用vue.js的要点总结
2019/07/07 Javascript
[04:09]2014DOTA2国际邀请赛Ti西雅图 历届冠军相继出局 BBC综述今日比赛
2014/07/20 DOTA
Python内置函数bin() oct()等实现进制转换
2012/12/30 Python
Python模仿POST提交HTTP数据及使用Cookie值的方法
2014/11/10 Python
Python实现的Excel文件读写类
2015/07/30 Python
python dict 字典 以及 赋值 引用的一些实例(详解)
2017/01/20 Python
分分钟入门python语言
2018/03/20 Python
DataFrame中去除指定列为空的行方法
2018/04/08 Python
Python重新加载模块的实现方法
2018/10/16 Python
django框架用户权限中的session缓存到redis中的方法
2019/08/06 Python
pycharm + django跨域无提示的解决方法
2020/12/06 Python
Html5自定义字体解决方法
2019/10/09 HTML / CSS
大学生精神文明先进个人事迹材料
2014/05/02 职场文书
社保缴纳证明申请书
2014/11/03 职场文书
2014年保密工作总结
2014/11/22 职场文书
2015仓库保管员年终工作总结
2015/05/13 职场文书
2015秋季开学典礼致辞
2015/07/16 职场文书
dubbo服务整合zipkin详解
2021/07/26 Java/Android
vue中的可拖拽宽度div的实现示例
2022/04/08 Vue.js