cocos 项目实践总结

news2024/9/21 22:45:38

文章目录

  • 组件文档的理解:
  • 开发过程顺序问题:
      • 1、获取锚点坐标
      • 2、事件监听
      • 3、批量生成选词按钮
      • 4、Button可以自定义边界、边界颜色、及弧度
        • 一些问题记录
          • 1、button点击过后重新恢复页面渲染,button的状态偶发还是点击态而非正常态
          • 2、偶发事件绑定失败:
          • 3、触摸不同状态下不仅需要切换button背景还需要切换文字内容,不一体
      • 5、自定义toast
      • 6、总出现一些死机问题,没有定位到,就很突然
      • 7、半屏/大屏切换问题
        • QQ频道互动应用内大小屏切换目前方案
      • 8、字体模糊问题解决
        • 实际应用:
        • 解决方案收集:
  • cocos开发后的思考

此文基于cocos3.6.2版本 2d;虽然cocos团队维护更新快,但是版本间差异还是蛮大的,如果是简单的canvas小游戏还是不建议使用大的框架,尤其web端无需适配的情况,炸壳的时候总是不断地需要翻看源码。

组件文档的理解:

一个scene当成是一个页面。scene做为一个场景一个大的组件,如果页面大的背景不变只是切换其中的内容;
todo - 待补充

开发过程顺序问题:

1、获取锚点坐标

一开始旧的版本是世界坐标系转,3.6的版本已经不同了,需使用 UITransform 组件的 convertToNodeSpaceAR 方法转换世界坐标到节点坐标。API 传送门

需要注意的是,不应带上世界坐标系原理的思路,这个函数的描述是:将一个 UI 节点世界坐标系下点转换到另一个 UI 节点 (局部) 空间坐标系,这个坐标系以锚点为原点。所以侧重的是UI,因此拿到UI节点坐标:let uiPos = event.getUILocation(); 非event.getLocation() 获取到的是 世界节点坐标;

let uiPos = event.getUILocation();
const transform = this.getComponent(UITransform);
const pos = transform.convertToNodeSpaceAR(v3(uiPos.x, uiPos.y));

2、事件监听

this.node.on(Node.EventType.MOUSE_DOWN, this.onMouseDown, this.node); // 第三个参数传递之后,函数中的this指向这个target
this.node.on(Node.EventType.MOUSE_DOWN, this.onMouseDown, this.node, true); // 注册在捕获状态,通常用于 父节点的触摸或鼠标事件先于任何子节点
input.on(Input.EventType.MOUSE_DOWN, this.onMouseDown, this.node); // 全局输入系统(全局输入事件包括鼠标、触摸、键盘和重力传感四种),简单的快速应用或主页应用


event.propagationStopped = true; 阻止事件进一步传递 stopPropagation()
stopPropagation()方法Event 阻止了当前事件在捕获和冒泡阶段的进一步传播;
preventDefault()阻止任何默认行为的发生,如a标签的默认点击效果;

父节点监听子组件再触发子组件事件,事件委托在这里应用的话,需要确认子组件的大概位置,要求不那么精确的可以应用;不过画布画出的页面,一版都有固定的触发事件及原理,且元素不多,所以不用费心考虑这部分的优化。

3、批量生成选词按钮

先创建一个Prefab(预制就像是组件,非常方便使用),在其父级引入并循环生成添加节点;生成之后使用update仅更新字体内容;

4、Button可以自定义边界、边界颜色、及弧度

使用系统的button组件总是觉得有些不舒适,记录一些问题:

一些问题记录

1、button点击过后重新恢复页面渲染,button的状态偶发还是点击态而非正常态

描述:世界上最难解决的问题就是偶发了,需要考虑所有可能的原因的排列组合。还没有足够的时间去发现,暂留记录下,有时间再看吧
解决方案:根据实际的状态页面切换重新渲染一次内容。

2、偶发事件绑定失败:

描述:组件事件面板里绑定事件的步骤,偶尔会出现绑定事件不被触发的情况,目前还未定位问题,但极大可能是因绑定失败而导致的不触发;
解决方案:使用自己写的btn来实现的效果。

3、触摸不同状态下不仅需要切换button背景还需要切换文字内容,不一体

描述:如描述,实在是不便啊,事件横竖都要监听
解决方案:使用自己写的btn来实现的效果。

自开发的btn也没有什么特别之处,只是比较适合自己当前的开发场景:同一个位置的btn顺序点击触发内容替换,只有两种状态:点击中、正常态(非点击、禁用);

5、自定义toast

原理,脱离文档流类信息,可以通过js/ts来直接写一个node元素,补充好样式进行应用,触发的事件添加到页面上,应用位置在主html页面;因此这类toast、loading可以自定义添加,其他页面中实际元素不能应用;

6、总出现一些死机问题,没有定位到,就很突然

代码改着改着就出现,每次都是回撤scene更改记录 + 重启电脑才能恢复,很是磨人;感觉可能是prefab和scene切换开发的时候,prefab没有及时保持或删除导致的问题。
死机截图

7、半屏/大屏切换问题

window.dispatchEvent(new Event('resize'))
// 监听屏幕变化及setDesignResolutionSize;且结合Widget设置位置
view.setResizeCallback(() => {
      view.setDesignResolutionSize(428, halfState ? 483 : 926, 4);
 })

这里遇到一个很坑的问题,ios的页面全屏发生了变化,但是内部的canvas依旧保持不变的大小;查看源码发现,cocos内部并没有放出resize重调用的触发函数,查看源码确认内部也是用的resize监听(web版),大小屏切换的时候会出现一个新高度获取失败仍为旧高度的情况;可以在确认高度更改成功之后再主动调取:window.dispatchEvent(new Event('resize')),此处不能使用定时器(这个一向是不被推荐的且难以控制)。

QQ频道互动应用内大小屏切换目前方案

只是目前方案,还在优化中;
监听回调里判断新旧高度变化,一致则代表未发生适应性变化,则需主动触发resize。不一致则表示已经发生变化,不用处理。
监听resize,自己控制分辨率变化及页面内容显示;

8、字体模糊问题解决

实际应用:

扩大字体翻倍缩放

解决方案收集:

1、动态字体缩放;(怎么生成动态字体?)
2、扩大字体字号缩放; - 增大纹理内存,对比!!!
3、改分辨率 devicePixelRatio ;
作用:Window 接口的 devicePixelRatio 返回当前显示设备的物理像素分辨率与CSS 像素分辨率之比。它告诉浏览器应使用多少屏幕实际像素来绘制单个 CSS 像素。换句话说,比值越大越清晰。

编译后的压缩代码没有发现/不知如何调整!!
模糊移动设备的分辨率为3,比引擎设置大,显得模糊了。

尝试发现:代码中的分辨率是内部渲染使用的,并不能更高使用的渲染分辨率。

4、项目抗锯齿 - 已打开project settings
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

cocos开发后的思考

1、使用不熟悉的工具开发的时候,一定要留够buffer时间,即使使用的范围很广;
2、前期的使用评估非常有必要,在这个需求之下,小点的html的工具是占据优势的;但是没有实践对比过的都只是未被验证的猜想,抽时间可以使用其他的完成一个功能demo来验证下;
3、cocos使用的精灵图资源都是有自己的一套打包逻辑的,观察应该是由页面文件名等的,这就在一定程度上对资源的加载优化,需要先搞清逻辑才行;
4、终端的缓存机制是黑盒,需要自行处理缓存;
todo - 待补充

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

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

相关文章

【自动驾驶基础入门】SLAM应该怎么学习?

1、SLAM是什么? SLAM是Simultaneous Localization and Mapping的缩写,即同时定位与地图构建。也称为自主机器人导航或者无人车等领域的基本任务之一。 简单来说,SLAM是指在未知环境中,通过移动机器人并利用其搭载的各种传感器数据…

Yolov5训练日记~如何用Yolov5训练识别自己想要的模型~

目录 一.数据集准备 二.标签设置 三.模型训练 四.模型测试 最近尝试了Yolov5训练识别人体,用的是自己尝试做的训练集。见识到Yolo的强大后,决定分享给大家。 一.数据集准备 数据集是从百度图片上下载的,我当然不可能一个一个下载&#xff…

还没用过这12款建筑设计软件?你OUT了

每个建筑设计软件都针对不同的需求。选择最好的一个取决于许多因素,例如成本、与其他程序的兼容性以及您愿意花在绘图过程上的时间。它还取决于您在设计过程中所处的位置——我们可能都开始在纸上画草图,然后转向建筑软件。我们甚至需要图形设计软件来说…

Haoop集群的搭建(小白教学)

搭建hadoop集群我们必须拥有自己的虚拟机,下列我会给大家奉上超详细的集群搭建以及我在搭建的时候碰到的问题以及对应解决办法,正所谓自己走过的错路是曲折的,也是防止大家做弯路,不仅浪费时间还心态爆炸,下面带走入ha…

蜘蛛池搭建需要多少域名?全面解析!

蜘蛛池是指为搜索引擎爬虫提供优质、可靠的页面,从而提高网站的收录和排名。在蜘蛛池搭建过程中,域名数量是一个非常重要的问题。那么,蜘蛛池搭建需要多少域名呢?本文将对这个问题进行全面解析。 首先,我们需要了解什么…

SQL教程

1、基础 演示数据库,下面是选自 “Websites” 表的数据: SELECT 语句用于从数据库中选取数据。 SELECT name,country FROM Websites;SELECT DISTINCT 语句用于返回唯一不同的值。 SELECT DISTINCT country FROM Websites;WHERE 子句用于提取那些满足…

二十三种设计模式第五篇--原型模式

原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建…

Linux网络——Shell编程之循环

Linux网络——Shell编程之循环 一、循环1.循环与遍历2.循环的优势 二、for 循环语句1.for 语句的结构2.for语句应用示例 三、while 循环语句1.while 语句的结构2.while语句应用示例 四、until 循环五、跳出循环1.break2.continue3.exit 六、死循环 一、循环 定义:循…

2023年适合营销公司使用的十大「社交媒体管理」工具

在遍地都是数字营销公司的时代,对品牌来说,拥有强大的社交媒体影响力以保持竞争力从未如此重要。 而对于管理一个或多个品牌的数字营销公司来说,从内容创作到执行报告,使用正确的工具可以帮助你做到这一点。从规划、管理和跟踪社…

idb使用教程(一)

概述 iOS开发桥(idb)是一个多功能的工具,用于自动化iOS模拟器和设备。它在一个一致的、对人友好的界面中暴露了很多分布在苹果工具中的功能。 安装 idb由两个部分组成,每个部分都需要单独安装。 idb伴侣 每个目标&#xff08…

《花雕学AI》ChatMind:与AI对话,轻松梳理思路并创建思维导图

引言: 思维导图是一种有效的思维工具,可以帮助用户整理和表达自己的思路,提高学习和工作的效率和质量。然而,传统的思维导图工具往往需要用户花费大量的时间和精力,学习和操作复杂的界面和功能,而且很难根据…

医院智能导诊系统,医院导航解决方案

随着现代医院规模不断扩大,功能区域越来越细化,面对复杂的楼宇结构,集中的就诊人流,患者在就诊中经常会面临找不到目的地的困境,就诊体验变差。针对这个问题,一些面积和规模都比较大的医院,已经…

html实现经典打方块小游戏

文章目录 1.设计来源1.1 主界面1.2 游戏界面1.3 游戏结束界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/130581985 html实现经典打方块小游戏源码 html实现经典打方块…

自主可控不走捷径,中国长城做难且正确的事

2020-2022年是中国信创产业的重要推广期,在国家战略的支持下,自主可控领域诸多相关企业均获得绝佳发展良机。 但信创产业“完成替代”不是终点,“实现领先”方是目标。如今势已启、路尚远,前景广阔的市场并不意味着自主可控相关企…

运营商三要素验证原理,这篇文章就够了!

引言 运营商三要素验证 API 是一种基于手机号码、身份证号码和姓名等三种信息的验证服务,主要用于验证用户身份信息的真实性和一致性,以及查询手机号码所属的运营商信息。 运营商三要素 API 的验证原理 1. 身份验证的原理 身份信息验证是运营商三要素…

入门级的家用洗地机怎么样?入门级洗地机推荐

洗地机的功能有很多,比如除菌、洗地机清洁地面的确是一把好手。但是!清洁完之后还要手动清洗洗地机,是一件麻烦事啊!现在市面上大部分洗地机都有自清洁这个功能,但是很多洗地机的自清洁并不算真正的自清洁,…

从月薪3000到月薪20000,自动化测试应该这样学...

绝大多数测试工程师都是从功能测试做起的,工作忙忙碌碌,每天在各种业务需求学习和点点中度过,过了好多年发现自己还只是一个功能测试工程师。 随着移动互联网的发展,从业人员能力的整体进步,软件测试需要具备的能力要…

倒转时空,颠覆传统:探究逆置链表的三种思路

本篇博客会讲解力扣“206. 反转链表”的解题思路,这是题目链接。 老规矩,先来审题: 示例如下: 提示和进阶: 本题的思路非常多,我讲解一下常见的思路。 思路1 最容易想到的方法,是直接使…

macOS本地python环境/vscode/导入python包/设置python解释器

查看macbook本地是否有python环境 输入python或者python3,退出python环境使用exit(),别忘了括号 没有的话去官网安装https://www.python.org/ 2. 安装vscode 官网https://code.visualstudio.com/ 3. 安装插件 点击左边的“插件”按钮,安装…

springcloud-gateway集成knife4j(swagger3)

springcloud-gateway集成knife4j(swagger3) springcloud-gateway集成knife4j(swagger3) 环境信息准备工作微服务集成knife4j 第一步:编写Knife4jApiInfoProperties第二步:编写配置类Knife4jConfig第三步&a…