CocosCreator 游戏小地图/地图雷达

2023-11-18

更多笔记和源码请关注:【微信公众号】 CocosCreator笔记

 

 

 

演示

 

 

 

ps:请注意左上角

 

 

 

 技术摘要 

 

 

大地图与小地图坐标转换

 

更新小地图中元素及视口位置

 

拖动小地图中视口位置/更新Main Camera位置

 

 

 

 

实现

 

 

 

01

 

小地图(图片)的宽高比例必须和大地图相等

这样就可以将大地图上的元素照搬到小地图上了

 

大地图:

 

小地图:

 

场景中小地图里的元素如下:

mini_map:小地图

player:玩家

monster:怪物

rect:当前视口

 

rect添加Graphics组件,画出当前视口矩形

 

 

02

 

坐标转换:

mapToMini(point: cc.Vec2) {
  let x = point.x / this.tileMap.node.width * this.miniMap.width;
  let y = point.y / this.tileMap.node.height * this.miniMap.height;

  return cc.v2(x, y);
}

miniToMap(point: cc.Vec2) {
  let x = point.x / this.miniMap.width * this.tileMap.node.width;
  let y = point.y / this.miniMap.height * this.tileMap.node.height;

  return cc.v2(x, y);
}

 

小地图注册触摸事件:

this.miniMap.on("touchstart", this.onTouchStart, this);
this.miniMap.on("touchmove", this.onTouchMove, this);
this.miniMap.on("touchend", this.onTouchEnd, this);
this.miniMap.on("touchcancel", this.onTouchEnd, this);

 

on/off记得要成对出现:

onDestroy() {
  this.miniMap.off("touchstart", this.onTouchStart, this);
  this.miniMap.off("touchmove", this.onTouchMove, this);
  this.miniMap.off("touchend", this.onTouchEnd, this);
  this.miniMap.off("touchcancel", this.onTouchEnd, this);
}

 

在触摸开始和滑动的时候更新Main Camera和小地图视口的位置

触摸结束的时候回到玩家当前视角

touchMiniMap(event: cc.Event.EventTouch) {
  let touchLocation = this.miniMap.convertToNodeSpaceAR(event.getLocation());
  let position = this.miniToMap(touchLocation);
  this.updateCameraPosition(position);
}

onTouchStart(event: cc.Event.EventTouch) {
  this.touchMiniMap(event);
}

onTouchMove(event: cc.Event.EventTouch) {
  this.touchMiniMap(event);
}

onTouchEnd(event: cc.Event.EventTouch) {
  this.updateCameraPosition(this.nodePlayer.position);
}

 

更新Main Camera位置并限制其边界

updateCameraPosition(target: cc.Vec2){
  if (target.x > this._cameraMaxX) {
    target.x = this._cameraMaxX;
  }
  if (target.x < -this._cameraMaxX) {
    target.x = -this._cameraMaxX;
  }
  if (target.y > this._cameraMaxY) {
    target.y = this._cameraMaxY;
  }
  if (target.y < -this._cameraMaxY) {
    target.y = -this._cameraMaxY;
  }

  this.mainCamera.node.position = target;

  this.updateMiniRect();
}

 

更新小地图视口位置

updateMiniRect() {
  let pointCamera = this.mainCamera.node.position.sub(cc.v2(cc.winSize.width / 2, cc.winSize.height / 2));
  pointCamera = this.mapToMini(pointCamera);

  this.miniRect.clear();
  this.miniRect.rect(pointCamera.x, pointCamera.y, this._miniScreenWidth, this._miniScreenHeight);
  this.miniRect.stroke();
}

 

 

—END—

声明:发布此文是出于传递更多知识以供交流学习之目的。若有来源标注错误或侵犯了您的合法权益,请作者持权属证明与我联系,我将及时更正、删除,谢谢。

作者:请容我安眠

更多笔记和源码请关注:【微信公众号】 CocosCreator笔记

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CocosCreator 游戏小地图/地图雷达 的相关文章

随机推荐

  • 机器学习练习题(二)

    从牛客网找来得题目 解析是题目下的高赞答案 1 下面有关分类算法的准确率 召回率 F1 值的描述 错误的是 a 准确率是检索出相关文档数与检索出的文档总数的比率 衡量的是检索系统的查准率 b 召回率是指检索出的相关文档数和文档库中所有的相关
  • 若依框架快速开发项目(避坑超详细)

    若依框架快速开发项目 避坑超详细 初衷 若依框架使用及其普遍 是一个非常优秀的开源框架 框架本身的权限系统 字典设置以及相关封装 安全拦截相当完善 本人受益匪浅 学学到了许多 在这里 先向原创作者致敬 本人刚刚接触这个框架的时候 很迷茫 几
  • 前端多级搜索条件,不走后台

    handleSearch 备份数据 let arr JSON parse JSON stringify this tableData form是查询条件 通过遍历key值来循环处理 Object keys this form forEach
  • 爬虫篇:动态网页的处理方式(中)——渲染动态网页

    每篇一句 A strong man will struggle with the storms of fate 前言 上一篇文章中我们介绍了爬取动态网页的一种方式 逆向工程 这种方式有一点美中不足 这种方式要求我们对JavaScript以及
  • Java将PDF文件转为Word文档

    Java将PDF文件转为Word文档 一 创建Springboot Maven项目 二 导入依赖信息
  • STL 中元素拷贝和替换相关算法

    copy 头文件 copy 算法定义在头文件 include 中 算法作用 copy 算法作用是把指定范围的迭代器的元素拷贝到指定的区间 代码示例 vector
  • 开机手动启动 MySQL 服务

    1 图形化界面启动 右击 计算机 在快捷菜单中选择 管理 命令 如图所示 打开 计算机管理 对话框 也可以执行 开始 控制面板 管理工具 服务 来启动服务 改成手动模式 每次电脑开机都需要点击启动服务 2 命令行启动 查看服务命令 net
  • APP版本升级后台接口兼容旧版本

    人工智能 零基础入门 http www captainbed net inner 公司开发APP 经常会有版本升级的情况 因此会出现新版本如何兼容旧版本的问题 iOS和android 不断有新的版本开发 很多服务端开发都是在以前接口的逻辑上
  • 【机器学习、神经网络、计算机视觉】 trick

    数据处理 flatten a matrix X of shape a b c d to a matrix X flatten of shape b c d a is to use X flatten X reshape X shape 0
  • blender学习笔记

    原型文章 https blog csdn net qq 38906523 article details 78843349 中文翻译版 https blog csdn net qq 38906523 article details 7962
  • css in js开发利器 - styled-components(样式组件)

    styled components 是一个常见的 css in js 类库 和所有同类型的类库一样 通过 js 赋能解决了原生 css 所不具备的能力 比如变量 循环 函数等 注意 有时候 React 版本和 styled componen
  • socket编程之服务器端与客户端(代码实例)

    在我们学习的过程中 对TCP IP UDP Socket编程这些词应该有所了解了 随着网络技术的发展 这些词充斥着我们的耳朵 那么我想介绍一下 什么是TCP IP UDP socket在哪里呢 socket通信是什么呢 socket接口函数
  • 【算法刷题】算法题解题方法技巧及典例汇总

    关键词 算法 二分查找 DFS BFS 动态规划 滑动窗口 位运算 前言 Leetcode刷题目的 无疑是提高自己的编程和算法能力 算法是面试逃不过的环节 之前都是刷每日一题 然后也有大半年没刷了 感觉并未真正学到啥东西 也没记住啥 之后开
  • 从0开始springboot后台管理项目-mybatis-plus/druid链接数据库多数据源

    1 准备完成的功能 通过mybatis plus druid进行数据库链接 配置多数据源 使用mybatis plus的原因就是太强大 比如支持Lambda 依赖少等等优点 可以搜索一下mybatis plus和mybatis的区别 2 m
  • 如何安装pip3以及第三方python库(for Mac)

    环境 OS 10 12 3 16D32 macOS Sierra Python3 Python 3 6 1 什么是pip Python之所以强大 其中一个原因是其丰富的第三方库 pip则是python第三方库的包管理工具 由于在Mac上py
  • Win10多用户同时远程桌面,并各自操作互不干扰

    微软Server版操作系统默认是支持多用户登陆的 例如Windows Server 2012 而Win10操作系统正常情况下是不允许用户同时远程的 即一个用户远程进来会把另一个用户踢掉 因此需要破解才能使得多个用户同时登陆远程桌面 也即需要
  • 笔记22-1(C语言进阶 动态内存管理)

    目录 注 为什么存在动态内存分配 动态内存函数的介绍 malloc和free calloc realloc 常见的动态内存错误 1 对NULL指针的解引用操作 2 对动态开辟空间的越界访问 3 使用free函数释放了非动态开辟的空间 4 使
  • 多线程间的5种通信方式

    问题 有两个线程 A 线程向一个集合里面依次添加元素 abc 字符串 一共添加十次 当添加到第五次的时候 希望 B 线程能够收到 A 线程的通知 然后 B 线程执行相关的业务操作 线程间通信的模型有两种 共享内存和消息传递 以下方式都是基本
  • 西门子S7-200PLC的自锁

    自锁 百度 交流接触器通过自身的常开辅助触头使线圈总是处于得电状态的现象叫做自锁 在通常的电路中 按下开关 电路通电 松开开关 电路又断开了 一旦按下开关 就能够自动保持持续通电 直到按下其它开关使之断路为止 这样的电路 称为自锁电路 置位
  • CocosCreator 游戏小地图/地图雷达

    更多笔记和源码请关注 微信公众号 CocosCreator笔记 演示 ps 请注意左上角 技术摘要 大地图与小地图坐标转换 更新小地图中元素及视口位置 拖动小地图中视口位置 更新Main Camera位置 实现 01 小地图 图片 的宽高比