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

news2024/11/28 0:35:58

系列文章目录

第一章 2D二维地图绘制、人物移动、障碍检测
第二章 跟随人物二维动态地图绘制、自动寻径、小地图显示(人物红点显示)
第三章 绘制冰宫宝藏地图、人物鼠标点击移动、障碍检测


文章目录

  • 系列文章目录
  • 前言
  • 一、本章节效果图
  • 二、介绍
    • 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;   //石头的标记是1
    item.factory = 2; //工厂
    item.girl = 3;  //女子
    item.girl_01 = 4; //女孩
    item.kt = 5; //空投大礼包
    item.lz = 6; //路障
    item.pz = 7; //喷子
    item.zz = 8; //沼泽
    item.hero = 9;   //英雄的标记是9
    item.heroHasPath = 10;   //自动寻径的英雄标记是10
    item.wdss = 11;  //僵尸的标记是11
    item.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.coloradmin.cn/o/793578.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GUI自动化测试进阶:页面对象模式

本文介绍的是页面对象设计模式及其常见的滥用继承的错误。 本文和语言无关&#xff0c;但作者主要使用python和java。本文假设读者已经具有了一定的python或java基础&#xff0c;知道类和方法是什么。 如果完全没有这方面的基础&#xff0c;请看我的《测试人员如何学Python》。…

TPS54620RHLR是一款同步降压转换器

TPS54620RHLR是一款同步降压转换器&#xff0c;通过高效率和集成高压侧和低压侧MOSFET&#xff0c;为小型设计进行了优化。通过电流模式控制实现了进一步的空间节省&#xff0c;从而减少了元件数量&#xff0c;并通过选择高开关频率&#xff0c;减少了电感器的占地面积。输出电…

Redis源码篇 - QuickList数据结构

Quicklist是Redis3.2之后引入的一个双向链表结构&#xff0c;其本质是对ziplist弊端的一个优化数据结构&#xff0c;ziplist是一种连续的内存空间&#xff0c;用于减少碎片化&#xff0c;减少内存占用&#xff0c;但是正是因为需要连续的内存空间&#xff0c;当数量越来越大时&…

023 - group by

GROUP BY语句将具有相同值的行分组到汇总行中 GROUP BY语句通常与聚合函数&#xff08;COUNT&#xff0c;MAX&#xff0c;MIN&#xff0c;SUM&#xff0c;AVG&#xff09;一起使用&#xff0c;将结果集分组为一列或多列。 SQL GROUP BY 语法 SELECT column_name(s) FROM tabl…

antd中的Cascader级联选择框怎么清空重置React

项目场景&#xff1a; React项目&#xff0c;使用antd中的Cascader级联选择框 问题描述&#xff1a; 通过其他按钮无法重置选择框中的项 原因分析&#xff1a;&#xff08;对应解决办法一和二&#xff09; 1、级联选择框的数据默认是根据options绑定的数组中的value值来进行…

Audio Clip

Unity支持的音频格式&#xff1a; aiff/wav&#xff1a;适用于较短声音片段 mp3/OGG:适用于较长的音乐片段 多声道强制转为单声道&#xff0c;减小所占内存。 勾选后会对声音有优化 在后台加载声音 Load Type&#xff1a; 第一个&#xff0c;以不压缩的形式存在内存&#…

idea插件开发-自定义语言02-Lexer

词法分析器或词法分析器定义文件内容如何分解为标记。词法分析器是自定义语言插件几乎所有功能的基础&#xff0c;比如基本语法突出显示到高级代码分析功能。由Lexer来定义。IDE在三个主要上下文中调用词法分析器&#xff0c;插件可以根据需要提供不同的词法分析器实现&#xf…

中南大学硕士论文latex版本全指导

要毕业了&#xff0c;闲下点时间写的东西。之前一直收益与师兄师姐流传下来的latex版本&#xff0c;用起来很舒服&#xff0c;希望后面的学弟学妹也能完美用上。latex功能很强大&#xff0c;不需要自己排版&#xff0c;只管内容即可&#xff0c;但是安装流程会多一丢丢。 目录 …

QT--day2(信号与槽,多界面跳转)

第一个界面头文件&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QIcon> //图标头文件 #include <QPushButton> //按钮类头文件QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public…

弱电系统与IBMS系统,强强联手打造智能建筑

随着科技的飞速发展和人们对建筑设施需求的不断提升&#xff0c;智能建筑正逐渐成为建筑行业的重要发展方向。智能建筑是指通过应用先进的技术和系统&#xff0c;对建筑物的结构、系统、服务和管理等进行优化组合&#xff0c;实现建筑设施的智能化和自动化。当前&#xff0c;智…

全网低价乱价怎么解决

随着品牌的逐步发展&#xff0c;销售渠道也会渐渐增多&#xff0c;比如电商平台中的产品链接&#xff0c;会随着品牌销售店铺的增多、销售SKU的增多&#xff0c;链接量逐步上升&#xff0c;各链接的价格也会有高有低&#xff0c;有些还会低于品牌要求的建议销售价&#xff0c;所…

Java spring Aop实战

0目录 Spring AOP 1.实战 1.实战 创建工程和依赖 数据库建表 实体类 Mapper 接口 方法一 方法二 Service包 接口1&#xff1a; 实现接口 Mapper Mapper 1 Mapper 2 配置xml文件 Xml 1 Xml 2 Spring 配置文件 Mybatis配置文件 测试类 数据库结果 …

信息系统项目管理师(第四版)教材精读思维导图-第三章信息系统治理

请参阅我的另一篇文章&#xff0c;综合介绍软考高项&#xff1a; 信息系统项目管理师&#xff08;软考高项&#xff09;备考总结_计算机技术与软件专业技术_铭记北宸的博客-CSDN博客 目录 3.1 IT治理 3.2 IT审计 3.1 IT治理 3.2 IT审计

小创业公司死亡剧本

感觉蛮真实的&#xff1b;很多小创业公司没有阿里华为的命&#xff0c;却得了阿里华为的病。小的创业公司要想活无非以下几点&#xff1a; 1 现金流&#xff0c;现金流&#xff0c;现金流&#xff1b; 2 产品&#xff0c;找痛点&#xff0c;不要搞伪需求&#xff1b; 3 根据公司…

DAY2,Qt(继续完善登录框,信号与槽的使用 )

1.继续完善登录框&#xff0c;当登录成功时&#xff0c;关闭登录界面&#xff0c;跳转到新的界面中&#xff0c;来回切换页面&#xff1b; ---mychat.h chatroom.h---两个页面头文件 #ifndef MYCHAT_H #define MYCHAT_H#include <QWidget> #include <QDebug> /…

Error in onLoad hook: “ReferenceError: plus is not defined“ found in

项目场景&#xff1a; 项目背景如下所示&#xff1a; 使用 HBuilder X 开发 项目&#xff0c; 调整页面时&#xff0c;直接运行到 浏览器查看页面设置效果&#xff0c;导致控制台出现下述报错信息 例如&#xff1a; 问题描述 遇到的问题如下所示&#xff1a; APP 中接收数据…

aigo S7 PSSD 固态硬盘提示“没有初始化”的修复分享

关于固态硬盘 我们知道,固态硬盘(SSD)因其轻、薄、快、低耗电、耐震、稳定性高、耐低温等优点得到了快速的应用,在存储设备市场中占有很大份额并在持续增长。但是,我们的固态硬盘一旦损坏,数据就比较难以恢复。 今天粉丝送来的一个aigo S7 PSSD 固态硬盘进行修复,插入…

XCP详解「3.2·CANape新建工程导入A2L」

返回 XCP详解「总目录」 目录 1、新建APE工程 2、导入A2L文件 3、查看信号 4、记录数据 1、新建APE工程 打开CANape 17.0 创建新工程 创建工程名 选择保存路径 完成后&#xff0c;会开启新工程空白界面 2、导入A2L文件 导入3.1中建好的A2L文件 根据需要设置Channel&#…

第七章:WILDCAT: 弱监督学习的深度卷积神经网络用于图像分类、点位定位和分割

0.摘要 本文介绍了WILDCAT&#xff0c;一种深度学习方法&#xff0c;它旨在通过对齐图像区域来获得空间不变性和学习强烈局部化特征。我们的模型仅使用全局图像标签进行训练&#xff0c;并致力于三个主要的视觉识别任务&#xff1a;图像分类、弱监督的逐点对象定位和语义分割。…

1500多名开发者集体提起诉讼,苹果公司回应:不垄断,还提供价值

根据路透社报道&#xff0c;1500多名开发者集体提起诉讼&#xff0c;指控苹果公司在其App Store上存在不公平行为并征收高额佣金。该诉讼要求赔偿高达7.85亿英镑&#xff08;约合72.38亿元人民币&#xff09;。 根据9to5Mac报道&#xff0c;苹果公司对最新起诉提出回应&#xf…