cocos creator制作2dTop-down游戏(虚拟摇杆、地图加载)
《不被遗忘的时光》第一期
1、游戏的形式:横板;2d的顶视角(Top-down);射击;ARPG;益智解谜。
2、画风:类似手游《伊洛纳》。
3、故事背景:以中元节的爷孙阴阳交流作为故事背景,参考《寻梦环游记》。以孙子的视角探寻爷爷年轻(1960s-1970s)年代的故事。
4、游戏引擎:cocos creator v3.8+
5、场景和相机:游戏场景主要两个:
(1)大厅(界面游戏和线索),只需要一个固定相机。
(2)游戏内的主场景,需要一个ui的固定相机,以及一个跟随主人公的相机。
下面是游戏内场景暂时的实现方案:
a.scene下两个画布:Canvas和UICanvas,UI层级更高,因为控制和信息的组件都在UI层。

b.项目设置为高度适配模式,然后两个画布分别加上widget组件,都选择宽度拉伸。
如果对适配感兴趣的,可以参考一下cocos creator 的适配用法。

c.两个画布分别挂上相机,而相机的可视层需要做区别,需要让UICanvas的相机拍不到Canvas的内容,反之亦然即可。
d.Canvas的相机需要跟随移动,但为了性能的考虑,这里使用的是延时检测加相机缓动的形式。在主人公移动时,通过时间间隔校验,当移动时间超过一定的阈值,则发送事件,让监听的相机做出移动跟随。
//主人公移动检测
if (this.m_iMoveInterval < 0){this.m_iMoveInterval = D.REFRESH_CAMERA_TIME;EventManager.getInstance().emit(D.DefineEvent.EVENT_PLAYER_MOVE);
}
//相机跟随的监听方法
private onPlayerMove(){if (this._playerPrefab.getComponent("hero").judgePlayerIsMove() && this.m_mainCamera){this.changeCameraPosition();}
}
这里我设置的REFRESH_CAMERA_TIME是1s,可以根据实际情况做调整。
注意:当主人公移动完成后,需要再发一个事件让相机移动到正确的位置,防止主人公的移动过程不足REFRESH_CAMERA_TIME。
案例演示效果:

6、控制方式:方向的控制用虚拟摇杆,攻击及其他功能的控制还没做。
(1)虚拟摇杆的实现方式,这里是使用了这位大佬的代码:虚拟摇杆,再加上了一点小修改,主要是加入了速度控制,以下是添加了速度控制的代码:
private _onTouchEventMove(event: EventTouch) {let curTouchPos = event.touch.getUILocation();let uiWorldPos = new Vec3(curTouchPos.x, curTouchPos.y, 0);let convertNodePos = this.node.getComponent(UITransform).convertToNodeSpaceAR(uiWorldPos);//触摸起始点世界坐标let originLocation = this.node.getWorldPosition();let startLocation:Vec2 = v2(originLocation.x, originLocation.y);//触摸点和大圆距离 (大圆坐标 = 触摸起始点坐标)let dist = Vec2.distance(curTouchPos, startLocation);let radian = Math.atan2(curTouchPos.y - startLocation.y, curTouchPos.x - startLocation.x);//触摸点和大圆夹角弧度//触摸点在大圆范围内,则小圆位置移动到当前触摸点let dirPos = convertNodePos;if (dist <= this.maxMoveRadius) {//触摸点在圆环范围外,如果小圆移动到当前触摸点就会跑出大圆了,所以小圆位置移动到大圆边缘if (isValid(this.imgSmallCircleSpNode)) {this.imgSmallCircleSpNode.setPosition(convertNodePos);}} else {let posX = Math.cos(radian) * this.maxMoveRadius;let posY = Math.sin(radian) * this.maxMoveRadius;dirPos = new Vec3(posX, posY, 0);if (isValid(this.imgSmallCircleSpNode)) {this.imgSmallCircleSpNode.setPosition(posX, posY);}}let slidingScale = dist / this.maxMoveRadius;slidingScale = slidingScale > 1 ? 1 : slidingScale;this._vcMoveData.slidingScale = slidingScale;this._vcMoveData.distance.x = dirPos.x / dist;this._vcMoveData.distance.y = dirPos.y / dist;let newAngle = radian * 180 / Math.PI;this._vcMoveData.angle = newAngle;let vcMoveData = this._vcMoveData.cloneSelf();//派发移动事件//this.node.emit(UIVCEvent.UIVC_Move, vcMoveData);EventManager.getInstance().emit(UIVCEvent.UIVC_Move, vcMoveData);}
如果对cocos creator 的触摸相关感兴趣的,可以跳转
7、地图加载
(1)地图做出无边界的形式动态的循环加载;我将地图分割为256*256像素的单元,动态的进行加载。
(2)将植物,建筑等作为预制体,带上碰撞盒和刚体,然后每个地图上放上需要的预制体。以下是示例:
注意,Top-down的2d游戏需要将重力加速度设为0:
cc.PhysicsSystem2D.instance.gravity = cc.v2(0, 0);
(3)碰撞关系可以直接在project setting的物理中设置:
(4)动态加载和刷新的代码会在第一章结束时上传到github和gitee上,这里暂时不做介绍。
(5)示例演示:
打开调试模式:

关闭调试模式:

8、美术风格上:2d像素风顶视角(Top-down),画风上参考《伊洛纳》。
由于我们现在只有程序,非常需要感兴趣的会画画、会spine动效的朋友们来一起来合作。
联系方式:rogerorion@163.com。
相关文章:
cocos creator制作2dTop-down游戏(虚拟摇杆、地图加载)
《不被遗忘的时光》第一期 1、游戏的形式:横板;2d的顶视角(Top-down);射击;ARPG;益智解谜。 2、画风:类似手游《伊洛纳》。 3、故事背景:以中元节的爷孙阴阳交流作为故…...
SQL Server 批量插入数据的方式汇总及优缺点分析
在 SQL Server 中,批量插入数据是非常常见的操作,尤其是在需要导入大量数据时。以下是几种常用的批量插入数据的方式: 1. 使用 INSERT INTO ... VALUES • 特点:适用于少量数据插入。 • 优点:简单易用。 • 缺点:不适合大量数据插入,性能较差。 • 示例:…...
linux上抓包RoCEv2
1、检查tcpdump版本 tcpdump help(4.99.4以上) 如果版本较低需要重新下载编译: wget https://www.tcpdump.org/release/libpcap-1.10.5.tar.xz wget http://www.tcpdump.org/release/tcpdump-4.99.4.tar.gz tar -xJf libpcap-1.10.5.tar.xz…...
【机器学习与数据挖掘实战】案例04:基于K-Means算法的信用卡高风险客户识别
【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈机器学习与数据挖掘实战 ⌋ ⌋ ⌋ 机器学习是人工智能的一个分支,专注于让计算机系统通过数据学习和改进。它利用统计和计算方法,使模型能够从数据中自动提取特征并做出预测或决策。数据挖掘则是从大型数…...
UDP网络编程套接
目录 本文核心 预备知识 1.端口号 认识TCP协议 认识UDP协议 网络字节序 socket编程接口 sockaddr结构 UDP套接字编程 服务端 客户端 TCP与UDP传输的区别 可靠性: 传输方式: 用途: 头部开销: 速度: li…...
期权VIX指数构建与择时应用
芝加哥期权交易 所CBOE的波动率指数VIX 是反映 S&P 500 指数未来 30 天预测期波动率的指标,由于预期波动率多用于表征市场情绪,因此 VIX 也被称为“ 恐慌指数”。 VIX指数计算 VIX 反映了市场情绪和投资者的风险偏好, 对于欧美市场而言…...
QT笔记- QClipboard剪切板对QByteArray数据的复制与粘贴
复制 // 存储在剪切板 QByteArray data; QClipboard * clipboard QGuiApplication::clipboard(); // 获取系统剪贴板对象 QMimeData * mimeData new QMimeData; // 注意, 剪切板会接管对象的释放 QString customMimeType "Test"; // 设置数据标识, 粘贴时将根据…...
Python使用PyMySQL操作MySQL完整指南
Python使用PyMySQL操作MySQL完整指南 1. 安装依赖 pip install pymysql2. 基础配置和数据库操作 2.1 基础配置类 import pymysql from typing import List, Dict, Optional from datetime import datetimeclass MySQLDB:def __init__(self):self.conn Noneself.cursor No…...
IAR中如何而将定义的数组放在指定的位置
在keil中可以使用下面的方法将数组定义到指定的位置 uint8_t g_usart_rx_buf[USART_REC_LEN] __attribute__ ((at(0X20001000)));但是这个方法在IAR中是用不了的,通过网上查找各种资料,发现了两种可用的方法。我这里测试的单片机是stm32f103c8t6,其他单…...
使用skywalking,grafana实现从请求跟踪、 指标收集和日志记录的完整信息记录
Skywalking是由国内开源爱好者吴晟开源并提交到Apache孵化器的开源项目, 2017年12月SkyWalking成为Apache国内首个个人孵化项目, 2019年4月17日SkyWalking从Apache基金会的孵化器毕业成为顶级项目, 目前SkyWalking支持Java、 .Net、 Node.js、…...
Ubuntu 20.04 24.04 双网卡 Bond 配置指南
前言:在现代服务器管理中,网络的稳定性和可靠性至关重要。为了提高网络的冗余性和负载能力,我们经常需要配置多个网络接口以实现链路聚合或故障转移。Ubuntu系统自17.10版本起,引入了Netplan作为新的网络配置抽象化工具࿰…...
深度学习之目标检测篇——残差网络与FPN结合
特征金字塔多尺度融合特征金字塔的网络原理 这里是基于resnet网络与Fpn做的结合,主要把resnet中的特征层利用FPN的思想一起结合,实现resnet_fpn。增强目标检测backone的有效性。代码实现如下: import torch from torch import Tensor from c…...
2024-2030全球及中国埋线针行业研究及十五五规划分析报告
2023年全球埋线针市场规模大约为0.73亿美元,预计2030年将达到1.37亿美元,2024-2030期间年复合增长率(CAGR)为9.5%。未来几年,本行业具有很大不确定性,本文的2024-2030年的预测数据是基于过去几年的历史发展…...
穷举vs暴搜vs深搜vs回溯vs剪枝专题一>子集
题目: 两个方法本质就是决策树的画法不同 方法一解析: 代码: class Solution {private List<List<Integer>> ret;//返回结果private List<Integer> path;//记录路径,注意返回现场public List<List<Int…...
MES系统工作流的单元测试方案
MES系统工作流的单元测试方案 在基于Java实现的MES系统中,若算子组成工作流并通过JSON传递数据,后端解析JSON后执行业务逻辑的流程,单元测试的核心是确保以下内容的正确性: 算子功能的正确性(每个算子单独的逻辑&…...
2.学习TypeScript 编译选项配置
自动编译 我们可以使用 tsc ...../.ts -w 命令进行ts文件的自动编译 执行后 编译会持续侦听 自动编译 这种方式只能侦听一个文件 对做项目肯定是不现实的,为了解决这个问题,我们需要添加一个tsconfig.json文件,写入一个基础对象 再有tsconfi…...
计算机网络之王道考研读书笔记-2
第 2 章 物理层 2.1 通信基础 2.1.1 基本概念 1.数据、信号与码元 通信的目的是传输信息。数据是指传送信息的实体。信号则是数据的电气或电磁表现,是数据在传输过程中的存在形式。码元是数字通信中数字信号的计量单位,这个时长内的信号称为 k 进制码…...
【BUG】记一次context canceled的报错
文章目录 案例分析gorm源码解读gin context 生命周期context什么时候cancel的什么时候context会被动cancel掉呢? 野生协程如何处理 案例分析 报错信息 {"L":"ERROR","T":"2024-12-17T11:11:33.0050800","file"…...
[SWPUCTF 2022 新生赛]善哉善哉
右击查看属性 然后放在010查看一下 摩斯密码解码 用佛曰解码 用md5加密看一下 最后一步md5,没有说明编码,尝试utf8和gbk ss4 施主,此次前来,不知有何贵干? import hashlib print(hashlib.md5(ss4.encode(utf8)).hexdigest())f…...
《PCI密码卡技术规范》题目
单选1 在《PCI密码卡技术规范》中,下列哪项不属于PCI密码卡的功能()。 A.密码运算功能 B.密钥管理功能 C.物理随机数产生功能 D.随主计算机可信检测功能 正确答案:D. <font style"color:#DF2A3F;">解析&…...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
