当前位置: 首页 > news >正文

[JavaScript游戏开发] 绘制冰宫宝藏地图、人物鼠标点击移动、障碍检测

系列文章目录

第一章 2D二维地图绘制、人物移动、障碍检测
第二章 跟随人物二维动态地图绘制、自动寻径、小地图显示(人物红点显示)
第三章 绘制冰宫宝藏地图、人物鼠标点击移动、障碍检测
第四章 绘制Q版地图、键盘上下左右地图场景切换


文章目录

  • 系列文章目录
  • 前言
  • 一、本章节效果图
  • 二、介绍
    • 2.1、准备地图素材
    • 2.2、封装地图上的物品素材(人物暂未拆出,也在此处)
    • 2.3、准备地图信息
    • 2.4、调试地图
  • 三、实际作业流程
    • 3.1、调试地图
      • 3.1.1、0 代表可走的路径,但是0在地图上看不见,我们可以先用其他的替代
      • 3.1.2、批量替换回去
      • 3.1.3、调试的渲染效果![在这里插入图片描述](https://img-blog.csdnimg.cn/880c3966afe245f3a0d9722c02230716.png)
      • 3.1.4、关闭调试模式
  • 总结


前言

本章内容融合了第一章、第二章的部分内容,因此带大家回顾下前两章的内容。

第一章:

  • 使用JavaScript绘制简单的二维地图
    采用二维数组存储地图信息,使用表格绘制地图,每个td单元格存储数据
  • 键盘上下左右控制
    使用JavaScript keyPress键盘事件监听WASD键,按键触发时人物做出相应操作
  • 障碍物碰撞检测(采用格子碰撞检测)
    人物下一步碰撞到石头时,提示遇到障碍,终止人物运动

第二章:

  • 使用aStar算法 + 鼠标事件(确定终点目标) 自动寻径
    采用二维数组存储地图信息,使用表格绘制地图,每个td单元格存储数据

本章节采用第一章节的地图绘制 ,第二章的自动寻径、障碍检测部分代码。


一、本章节效果图

在这里插入图片描述

二、介绍

在第二章里的游戏界面有2个区域,本次只显示小地图,大地图动态加载背景需要运用裁剪图片(需要根据人物自动定位图片坐标,地图跟随变化),工作量较大放在后续实现。
在这里插入图片描述

2.1、准备地图素材

在这里插入图片描述

2.2、封装地图上的物品素材(人物暂未拆出,也在此处)

// 物品
var item = {};item.initItem = function (){item.empty = 0;   //空地或草坪item.stone = 1;   //石头的标记是1item.factory = 2; //工厂item.girl = 3;  //女子item.girl_01 = 4; //女孩item.kt = 5; //空投大礼包item.lz = 6; //路障item.pz = 7; //喷子item.zz = 8; //沼泽item.hero = 9;   //英雄的标记是9item.heroHasPath = 10;   //自动寻径的英雄标记是10item.wdss = 11;  //僵尸的标记是11item.datas = [];  // 物品的图片集合var itemPrefixPath = "../img/item/";item.datas[0] = "";item.datas[1] = itemPrefixPath + "stone.png";item.datas[2] = itemPrefixPath + "gc.png";item.datas[3] = itemPrefixPath + "girl.png";item.datas[4] = itemPrefixPath + "girl.bmp";item.datas[5] = itemPrefixPath + "kt.png";item.datas[6] = itemPrefixPath + "lz.png";item.datas[7] = itemPrefixPath + "pz.png";item.datas[8] = itemPrefixPath + "zz.png";item.datas[9] = itemPrefixPath + "/spine/hero002.gif";item.datas[10] = itemPrefixPath + "/spine/tank.gif";item.datas[11] = itemPrefixPath + "wdss.gif";
}

2.3、准备地图信息

		/*** 加载地图数据* 0 可走的路径* 1 障碍* 5 空投* 9 英雄* @type {number[]}*/var mapData = [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],[1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1],[1, 1, 5, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1],[1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1],[1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1],[1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1],[1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1],[1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1],[1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1],[1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1],[1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1],[1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1],[1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1],[1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1],[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]

2.4、调试地图

调试地图阶段,给td的边框着色

<style>table.main,table.small {border-collapse: collapse;}.bg {background: url("../img/item/bg/bg005.png");background-position: center;background-size: cover;background-repeat: no-repeat;}table.small td {border: 1px red solid;width: 70px;height: 45px;}</style>

在这里插入图片描述

三、实际作业流程

3.1、调试地图

3.1.1、0 代表可走的路径,但是0在地图上看不见,我们可以先用其他的替代

		/*** 加载地图数据* 0 可走的路径* 1 障碍* 5 空投* 9 英雄* @type {number[]}*/var mapData = [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],[1, 1, 1, 5, 5, 1, 1, 1, 1, 1, 1, 5, 5 1, 1, 1],[1, 1, 5, 5, 5, 5, 1, 1, 1, 1, 5, 5, 5, 5, 1, 1],[1, 1, 5, 5, 5, 5, 1, 1, 1, 1, 5, 5, 5, 5, 1, 1],[1, 1, 1, 5, 5, 5, 1, 1, 1, 1, 5, 5, 5, 5, 1, 1],[1, 1, 1, 1, 1, 5, 5, 1, 1, 5, 5, 1, 1, 1, 1, 1],[1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1],[1, 1, 1, 1, 1, 1, 1, 5, 5, 1, 1, 1, 1, 1, 1, 1],[1, 1, 1, 1, 1, 1, 1, 5, 5, 1, 1, 1, 1, 1, 1, 1],[1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1],[1, 1, 1, 1, 1, 5, 5, 1, 1, 5, 5, 1, 1, 1, 1, 1],[1, 1, 1, 1, 5, 5, 1, 1, 1, 1, 5, 5, 5, 1, 1, 1],[1, 1, 5, 5, 5, 5, 1, 1, 1, 1, 5, 5, 5, 5, 1, 1],[1, 1, 5, 5, 5, 5, 1, 1, 1, 1, 5, 5, 5, 5, 1, 1],[1, 1, 1, 5, 5, 1, 1, 1, 1, 1, 1, 5, 5, 1, 1, 1],[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]

地图绘制(地图数据、英雄初始数据、物品数据)

3.1.2、批量替换回去

1、把5再修改回0,就是上图空投所占据的地方,都是英雄可走的路径
2、然后随机替换一个0,变成5(空投),这样地图上就有一个空投了
在这里插入图片描述
在这里插入图片描述

3.1.3、调试的渲染效果在这里插入图片描述

3.1.4、关闭调试模式

找到【2.4、调试地图】部分,关闭调试模式(去除td的边框着色)

<style>table.main,table.small {border-collapse: collapse;}.bg {background: url("../img/item/bg/bg005.png");background-position: center;background-size: cover;background-repeat: no-repeat;}table.small td {/** border: 1px red solid; */width: 70px;height: 45px;}</style>

总结

以上就是今天要讲的内容,本文仅仅简单介绍了其中一种地图(冰宫宝藏)的绘制,后续还会推出更多地图,比如:问道、梦幻西游、传奇等游戏的地图。

放出一个半成品地图渲染效果(已实现碰撞检测、自动寻径):
在这里插入图片描述

http://www.lryc.cn/news/108398.html

相关文章:

  • 【NLP概念源和流】 01-稀疏文档表示(第 1/20 部分)
  • 服务器运行python程序的使用说明
  • 8.2一日总结
  • JavaScript(四)DOM及CSS操作
  • window中,关闭java占用端口的进程
  • 【Python】PySpark 数据计算 ⑤ ( RDD#sortBy方法 - 排序 RDD 中的元素 )
  • Elasticsearch官方测试数据导入
  • uniapp项目的pdf文件下载与打开查看
  • DeepVO 论文阅读
  • HOT71-字符串解码
  • redis-server进程无法关闭终极解决方案
  • (5)将固件加载到没有ArduPilot固件的主板上
  • wpf画刷学习1
  • Opencv C++实现yolov5部署onnx模型完成目标检测
  • django bootstrap html实现左右布局,带折叠按钮,左侧可折叠隐藏
  • Mapping温度分布验证选择数据记录仪时需要考虑的13件事
  • 【题解】 判断一个链表是否为回文结构
  • Microsoft Message Queuing Denial-of-Service Vulnerability
  • 软件设计师(五)软件工程基础知识
  • Java中的JUnit单元测试方法的使用
  • 一文学透设计模式——抽象工厂模式
  • Vue3与Vue2区别和总结(1)
  • 【华秋推荐】物联网入门学习模块 ESP8266
  • 本科专科毕业论文如何选题-附1000多论文题目-论文选题--【毕业论文】
  • pip安装jupyter notebook
  • STM32刷Micropython固件参考指南
  • 学生信息管理系统自动化测试
  • Java面向对象之toString()方法
  • MySQL(一)
  • 使用docker部署node和react应用