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;">解析&…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...
MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...
深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...
