如何利用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 相关文章推荐
PNGHandler-借助JS让PNG图在IE下实现透明(包括背景图)
Aug 31 Javascript
页面中body onload 和 window.onload 冲突的问题的解决
Jul 01 Javascript
文本框中,回车键触发事件的js代码[多浏览器兼容]
Jun 07 Javascript
jquery事件机制扩展插件 jquery鼠标右键事件。
Dec 26 Javascript
通过AJAX的JS、JQuery两种方式解析XML示例介绍
Sep 23 Javascript
javascript中数组的冒泡排序使用示例
Dec 18 Javascript
JS封装的三级联动菜单(使用时只需要一行js代码)
Oct 24 Javascript
Vue动态组件实例解析
Aug 20 Javascript
用vue2.0实现点击选中active其他选项互斥的效果
Apr 12 Javascript
原生实现一个react-redux的代码示例
Jun 08 Javascript
微信小程序云开发获取文件夹下所有文件(推荐)
Nov 14 Javascript
js实现三角形粒子运动
Sep 22 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
晶体管来复再生式二管收音机
2021/03/02 无线电
ThinkPHP3.1新特性之查询条件预处理简介
2014/06/19 PHP
Laravel中Trait的用法实例详解
2016/03/16 PHP
PHP AjaxForm提交图片上传并显示图片源码
2016/11/29 PHP
PHP空值检测函数与方法汇总
2017/11/19 PHP
Thinkphp 框架扩展之应用模式实现方法分析
2020/04/27 PHP
jquery的ajax从纯真网(cz88.net)获取IP地址对应地区名
2009/12/02 Javascript
前端开发部分总结[兼容性、DOM操作、跨域等](持续更新)
2010/03/04 Javascript
javascript 浏览器检测代码精简版
2010/03/04 Javascript
基于jQuery实现下拉框
2014/11/24 Javascript
js正则表达式中exec用法实例
2015/07/23 Javascript
bootstrap多种样式进度条展示
2016/12/20 Javascript
微信小程序 textarea 组件详解及简单实例
2017/01/10 Javascript
微信小程序实现自定义picker选择器弹窗内容
2020/05/26 Javascript
解决vue项目nginx部署到非根目录下刷新空白的问题
2018/09/27 Javascript
JS实现盒子拖拽效果
2020/02/06 Javascript
ES5和ES6中类的区别总结
2020/12/21 Javascript
JavaScript实现页面高亮操作提示和蒙板
2021/01/04 Javascript
NestJs使用Mongoose对MongoDB操作的方法
2021/02/22 Javascript
[16:04]DOTA2海涛带你玩炸弹 9月5日更新内容详解
2014/09/05 DOTA
[44:40]Spirit vs Navi Supermajor小组赛 A组败者组第一轮 BO3 第一场 6.2
2018/06/03 DOTA
[48:46]完美世界DOTA2联赛PWL S2 SZ vs FTD.C 第二场 11.19
2020/11/19 DOTA
[01:06:54]DOTA2-DPC中国联赛 正赛 RNG vs Dragon BO3 第一场 1月24日
2021/03/11 DOTA
Selenium控制浏览器常见操作示例
2018/08/13 Python
Python使用while循环花式打印乘法表
2019/01/28 Python
Python实现 PS 图像调整中的亮度调整
2019/06/28 Python
使用phonegap检测网络状态的方法
2017/03/30 HTML / CSS
ASICS印度官方网站:日本专业运动品牌
2020/06/20 全球购物
C语言中一个结构不能包含指向自己的指针吗
2012/05/25 面试题
天网面试题
2013/04/07 面试题
绝对经典成功的大学生推荐信
2013/11/08 职场文书
人力资源管理专业自荐书
2014/07/07 职场文书
贷款委托书怎么写
2014/08/02 职场文书
大学生求职自荐信范文
2015/03/04 职场文书
校运会广播稿
2015/08/19 职场文书
MySQL里面的子查询的基本使用
2021/08/02 MySQL