【cocos creator 】生成六边形地图

news2024/11/24 1:05:28

想要生成一个六边形组成的地图

完整代码示例

以下是完整的代码示例,包含了注释来解释每一步:

cc.Class({
    extends: cc.Component,

    properties: {
        hexPrefab: {
            default: null,
            type: cc.Prefab
        },
        mapWidth: 10,   // 网格的宽度(六边形的数量)
        mapHeight: 10,  // 网格的高度(六边形的数量)
        hexSize: 64     // 六边形的大小(从中心到顶点的距离)
    },

    // onLoad is called once when the script is loaded
    onLoad() {
        this.generateHexMap();
    },

    generateHexMap() {
        // 计算六边形的宽度和高度
        let hexWidth = this.hexSize * Math.sqrt(3); // 计算六边形的宽度
        let hexHeight = this.hexSize * 1.5; // 计算六边形的高度

        // 遍历行和列生成六边形
        for (let y = 0; y < this.mapHeight; y++) {
            for (let x = 0; x < this.mapWidth; x++) {
                // 计算六边形的 x 和 y 坐标
                let xPos = x * hexWidth + (y % 2) * (hexWidth / 2);
                let yPos = y * (hexHeight * 0.75);

                // 实例化一个六边形预制体并设置其位置
                let hex = cc.instantiate(this.hexPrefab);
                hex.setPosition(cc.v2(xPos, yPos));
                this.node.addChild(hex); // 将六边形添加到当前节点
            }
        }
    }
});

this.hexSize 是一个属性,用来定义六边形的大小。在生成六边形网格时,它决定了每个六边形的边长或半径,从而影响整个网格的布局和尺寸。

在六边形网格中,hexSize 通常指的是六边形从中心到任意一个顶点的距离(也可以理解为半径)。这个值被用来计算六边形的宽度(从一边到另一边的水平距离)和高度(从一个顶点到对面顶点的垂直距离)。

具体示例说明

假设 this.hexSize = 64,那么:

  • 六边形宽度(hexWidth):这是从六边形左边到右边的水平距离。对于正六边形,宽度公式为 hexWidth = hexSize * sqrt(3)。在代码中,这样计算:

    let hexWidth = this.hexSize * Math.sqrt(3);
    

    如果 this.hexSize = 64,则 hexWidth = 64 * sqrt(3) ≈ 110.85

  • 六边形高度(hexHeight):这是从一个顶点到对面顶点的垂直距离。对于正六边形,高度公式为 hexHeight = hexSize * 2。在代码中,这样计算:

    let hexHeight = this.hexSize * 1.5;
    

    如果 this.hexSize = 64,则 hexHeight = 64 * 1.5 = 96

生成六边形网格的原理

每个六边形的位置由其在网格中的索引 (x, y) 决定。由于六边形的相邻行是错位排列的,需要根据行号 (y) 进行偏移:

  • 水平偏移

    let xPos = x * hexWidth + (y % 2) * (hexWidth / 2);
    

    这段代码意思是:如果当前行号是奇数(y % 2),则将六边形水平位置向右偏移半个六边形的宽度,以实现错位排列。

  • 垂直偏移

    let yPos = y * (hexHeight * 0.75);
    

    这段代码意思是:每行的六边形向下移动 0.75 个六边形高度,以实现垂直错位排列。0.75 是为了保证六边形之间的紧密排列。

在这里插入图片描述

运行项目

  1. 在Cocos Creator中创建一个新的空节点,命名为HexMap
  2. HexMap.js脚本添加到HexMap节点。
  3. 将你创建的六边形预制体(HexPrefab)拖放到HexMap脚本的hexPrefab属性中。
  4. 运行项目,观察生成的六边形网格地图。

这样,你就能生成一个六边形网格地图,并可以根据需要调整六边形的大小和地图的宽高参数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1690127.html

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

相关文章

基于Pytorch框架全连接神经网络对手势图片识别

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 手势识别是计算机视觉领域的一个重要研究方向&#xff0c;具有广泛的应用前景&#xff0c;如人…

react中怎么为props设置默认值

在React中&#xff0c;你可以使用ES6的类属性&#xff08;class properties&#xff09;或者函数组件中的默认参数&#xff08;default parameters&#xff09;来定义props的默认值。 1.类组件中定义默认props 对于类组件&#xff0c;你可以在组件内部使用defaultProps属性来…

基于Java的推箱子游戏设计与实现(论文 + 源码)

【免费】关于基于JAVA的推箱子游戏.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89325018 基于Java的推箱子游戏设计与实现 摘 要 社会在进步&#xff0c;人们生活质量也在日益提高。高强度的压力也接踵而来。社会中急需出现新的有效方式来缓解人们的压力。…

Java开发大厂面试第20讲:什么是分布式锁?Redi 怎样实现的分布式锁?

“锁”是我们实际工作和面试中无法避开的话题之一&#xff0c;正确使用锁可以保证高并发环境下程序的正确执行&#xff0c;也就是说只有使用锁才能保证多人同时访问时程序不会出现问题。 我们本课时的面试题是&#xff0c;什么是分布式锁&#xff1f;如何实现分布式锁&#xf…

秋招突击——算法打卡——5/24——无重复字符的最长字串

题目描述 实现代码 // 无重复字符的最长子串 int lengthOfLongestSubstring(string s) {int l 0,r 0;int res 0;unordered_map<char,int> temp;while(l < s.size()){temp[s.at(l)] l;for (r l 1; r < s.size() ; r) {if(temp.count(s.at(r))) break;else te…

Python UDP编程简单实例

TCP是建立可靠的连接&#xff0c;并且通信双方都可以以流的形式发送数据。 相对于TCP&#xff0c;UDP则是面向无连接的协议&#xff0c;不需要建立连接&#xff0c;只需要知道对方IP地址和端口号&#xff0c;就可以直接发送数据包。但是只管发送不保证到达。 虽然UDP传输数据…

详解 UML 中的关系概念

关联&#xff08;Association&#xff09; 表示两个类之间的一种语义性联系。例如: 学生与班级之间的关联关系。 有向关联&#xff08;Directed Association&#xff09; 关联关系有方向性,表示一个类能访问另一个类,但不一定反过来。例如: 教师能查看学生的成绩,但学生不能查…

三能一体运营体系助力政企支撑水平提升

生产力的发展是现代社会孜孜不倦的追求&#xff0c;由此产生了我们熟悉的“机械化、电子化、信息化”乃至现今正在发生的“智能化”四次工业革命。这些是由技术的突破性发展带来的&#xff0c;但我们也注意到生产力发展的另一个助力&#xff0c;即生产效率的提升&#xff0c;19…

PE文件(六)新增节-添加代码作业

一.手动新增节添加代码 1.当预备条件都满足&#xff0c;节表结尾没有相关数据时&#xff1a; 现在我们将ipmsg.exe用winhex打开&#xff0c;在节的最后新增一个节用于存放我们要增加的数据 注意&#xff1a;飞鸽的文件对齐和内存对齐是一致的 先判断节表末尾到第一个节之间…

系统架构师-考试-基础题-错题集锦1

系统架构师-考试-基础题-错题集锦 1.当一台服务器出现故障时将业务迁移到另外一台物理服务器上&#xff0c;保障了业务的连续性。 2.面向对象&#xff1a; 实体类&#xff0c;边界类&#xff0c;控制类 3.RUP&#xff1a;UP&#xff0c;统一过程&#xff0c;以架构为中心&am…

养鸡游戏牧场游戏已对接广告联盟功能介绍

养鸡游戏牧场游戏在对接广告联盟后&#xff0c;主要实现了以下几个功能&#xff1a; 广告展示与收益&#xff1a; 游戏内会嵌入广告联盟的广告&#xff0c;这些广告可能会以横幅、插屏、视频等多种形式出现在游戏的各个界面&#xff0c;如主界面、场景切换、任务完成等时机。广…

【深度学习02】注意力机制

1.自注意力机制 自注意力机制&#xff08;Self-Attention Mechanism&#xff09;是深度学习中的一种方法&#xff0c;广泛应用于自然语言处理和其他领域。为了更好地理解它&#xff0c;可以用一个简单的类比来解释。 类比&#xff1a;学生在课堂上做笔记 假设你是一个学生&a…

合约开发的基本结构剖析及前置知识梳理

前置知识点 上下文变量初步 合约函数的背后是transaction&#xff0c;上下文变量访问的是transaction中的信息两个上下文变量&#xff1a;tx和msg ERC20 规范代码实现Metamask测试 ganache-cli的安装 安装 npm install -g ganache-cli启动 ganache-cli如果出现以下这种…

ZooKeeper系列之ZAB协议

概述 ZooKeeper Atomic Broadcast&#xff0c;ZooKeeper原子消息广播协议。ZAB协议是为分布式协调服务ZK专门设计的一种支持崩溃恢复的原子广播协议。ZK主要依赖ZAB协议来实现分布式数据的最终一致性&#xff0c;基于该协议&#xff0c;ZK实现一种主备模式的系统架构来保持集群…

【EI会议】2024年雷达、电子与通信工程国际会议(ICREC 2024)

2024年雷达、电子与通信工程国际会议 2024 International Conference on Radar, Electronics and Communication Engineering 【1】会议简介 2024年雷达、电子与通信工程国际会议即将在深圳隆重召开。深圳&#xff0c;这座充满活力的现代化都市&#xff0c;以其卓越的科技创新…

后端之路第二站(正片)——SprintBoot之:设置请求接口

这一篇讲怎么简单结合模拟云接口&#xff0c;尝试简单的后端接接口、接受并传数据 一、下载Apifox接口文档软件 目前的企业都是采用前后端分离开发的&#xff0c;在开发阶段前后端需要统一发送请求的接口&#xff0c;前端也需要在等待后端把数据存到数据库之前&#xff0c;自己…

微信H5跳小程序 wx-open-launch-weapp ios显示且正常跳转,安卓不显示不报错解决方案

前提&#xff1a;在一切都正常(无报错&#xff0c;没有写法错误等)的情况下&#xff0c;出现这个问题: 去你的h5项目&#xff0c;用浏览器打开&#xff0c;在network随便找一个静态文件&#xff0c;在response响应标头中找找&#xff0c;是否有Content-Security-Policy这个头&…

vue2流星雨(可调角度)

新建StarBackground.vue组件 打开组件注释部分可以随机颜色 <template><div class"rain"><divv-for"(item,index) in rainNumber":key"index"class"rain-item"ref"rain-item":style"transform:rotate(…

【MySQL进阶之路 | 基础篇】触发器

1. 为什么要使用触发器 我们可能会遇到如下场景.我们有两个相互关联的表&#xff0c;如商品信息表与库存信息表.当我们向商品信息表添加一条记录时&#xff0c;为了保证数据完整性&#xff0c;也必须向库存信息表添加一条数据.我们就必须把这两个关联的操作写在程序里&#xf…

【APKtool】APKtool实现某瓣APP重签名

APP name 重打包 重打包完成 开始签名 apktool签名 使用 APKtool 或其他工具生成的签名文件与原始签名文件的区别主要在于它们使用的密钥和证书可能不同。当你使用 APKtool 对 APK 文件进行反编译、修改后再重新打包时&#xff0c;你通常需要使用一个新的密钥和证书对修改后…