- 博客(48)
- 收藏
- 关注
原创 【优化】水友发的drawcall优化方案(增加depth属性)
这个方案原理是给节点增加一个depth属性,然后在渲染batcher-2d.ts的walk方法中,按照depth重新对渲染排序,根据depth从小到大进行渲染。实践使用中,例如一个场景或弹窗,根节点绑定一个SetBatchRoot.s,表明这个根节点下所有子节点需要按照depth排序。背景图、来自通用大图集的图片默认depth=0就行,label都设置为depth=10,1-9预留用于灵活设置。那么渲染顺序变成如下,2个sprite为第一第二,2个label为第三第四,drawcall由原来的4变成2。
2025-08-20 03:26:12
302
原创 Cocos3.x 使用Protobuf
cocoscreator编辑器中选择protobuf-library.min和protobuf-bundles.min两个文件,并勾选为插件。将game.proto导出成client_pb.d和client_pb.min,同样以插件形式放入cocos项目目录libs/proto下。在项目目录/asset/libs/proto下保存protobufjs的文件,文件大小合计248kb。cocos中代码主要分成模块和插件两种,而cocos官方推荐模块代替插件使用。,来实现protobuf的使用,没有成功。
2025-08-18 18:26:00
363
原创 【工具】Cocos3.x 使用Protobuf
cocoscreator编辑器中选择protobuf-library.min和protobuf-bundles.min两个文件,并勾选为插件。将game.proto导出成client_pb.d和client_pb.min,同样以插件形式放入cocos项目目录libs/proto下。在项目目录/asset/libs/proto下保存protobufjs的文件,文件大小合计248kb。cocos中代码主要分成模块和插件两种,而cocos官方推荐模块代替插件使用。,来实现protobuf的使用,没有成功。
2025-08-18 18:26:00
409
原创 【算法】Cocos3.x 碰撞检测
AABB,Axis-Aligned Bounding Box,轴对齐包围盒,判断投影是否重叠方法来检测碰撞,AABB表示没有旋转的矩形。其中getBoundingBox()获取的Rect,值(x,y,width,height)中的x,y是矩形左下角的坐标位置。最可靠方法是分离轴定理(SAT),具体实现可用AI,挺复杂的,平时也用不着旋转的矩形碰撞检测。该方法不能检查旋转的图形,如下图,红色旋转了45°,碰撞检测仍然输出为true,这是不对的。red是矩形,blue是半径50的圆形,检测结果是true。
2025-08-18 16:06:00
463
原创 Cocos3.x 碰撞检测
AABB,Axis-Aligned Bounding Box,轴对齐包围盒,判断投影是否重叠方法来检测碰撞,AABB表示没有旋转的矩形。1. 圆形碰撞常用于飞行射击游戏中,子弹和飞机的碰撞,因为有大量弹幕,圆形碰撞检测性能又高,所以采用圆形碰撞比较合适。最可靠方法是分离轴定理(SAT),具体实现可用AI,挺复杂的,平时也用不着旋转的矩形碰撞检测。该方法不能检查旋转的图形,如下图,红色旋转了45°,碰撞检测仍然输出为true,这是不对的。找到离圆心最近的矩形顶点,判断圆心和顶点的距离小于圆半径,则碰撞。
2025-08-18 16:05:00
458
原创 【问题】Edge浏览器点击标签、收藏夹、设置等无反应
2. 在C盘找到C:\Users\Admin\AppData\Local\Microsoft\Edge\User Data里的Local State文件删除掉。1. 关闭浏览器,并按ctrl+alt+del,在任务管理器里搜索edge,结束edge的进程。3. 重启打开edge,这时会重新设置浏览器,按提示设置完即可恢复正常。但是之前的设置没了,例如全局截图按了没反应...
2025-08-10 01:07:00
580
原创 【工具】PerfDog 试用
另外还有深度分析功能,有个类似chrome performance的界面,可以直观看到哪里耗时卡顿。用这个实际跑几遍游戏,fps稳定、内存占用稳定、温度稳定,基本就行了。2 Prefdog左上角选择手机、选择微信小游戏应用。PerfDog是全平台测试分析专家,下载来试试看。1 手机usb连接电脑,手机上打开微信小游戏。注册送15分钟免费时间。然后就要钱了,挺贵的。3 Prefdog右下角+号可以增加测试项。4 主要是看FPS、内存、CPU、温度。下载后是绿色版,都不需要安装。
2025-07-31 01:05:00
341
原创 PerfDog 试用
另外还有深度分析功能,有个类似chrome performance的界面,可以直观看到哪里耗时卡顿。用这个实际跑几遍游戏,fps稳定、内存占用稳定、温度稳定,基本就行了。2 Prefdog左上角选择手机、选择微信小游戏应用。PerfDog是全平台测试分析专家,下载来试试看。1 手机usb连接电脑,手机上打开微信小游戏。注册送15分钟免费时间。然后就要钱了,挺贵的。3 Prefdog右下角+号可以增加测试项。4 主要是看FPS、内存、CPU、温度。下载后是绿色版,都不需要安装。
2025-07-31 01:04:00
258
原创 Cocos3.x 压缩纹理
2 压缩纹理可以减少图片占用内存大小,减轻由于内存数据传输导致的发热、卡顿、延迟、触发垃圾回收等问题,根据Laya文档写的是占用内存减少在80%左右,根据微信文档写的是内存占用减少在70%左右,例如png占用0.83m,压缩纹理后占用0.17M。3 压缩纹理后图片尺寸会变大,也就是astc、etc、pvr文件会比png大 ,比如png 40kb,astc 44kb、etc 84kb、pvr 516kb。4 图片加载流程(图片来自字节抖音文档),压缩后的纹理和png主要区别就是不需要解码。
2025-07-26 03:02:00
415
原创 【工具】Cocos3.x 压缩纹理
2 压缩纹理可以减少图片占用内存大小,减轻由于内存数据传输导致的发热、卡顿、延迟、触发垃圾回收等问题,根据Laya文档写的是占用内存减少在80%左右,根据微信文档写的是内存占用减少在70%左右,例如png占用0.83m,压缩纹理后占用0.17M。3 压缩纹理后图片尺寸会变大,也就是astc、etc、pvr文件会比png大 ,比如png 40kb,astc 44kb、etc 84kb、pvr 516kb。使用压缩纹理,选择自动图集auto-atlas文件,在属性面板勾选压缩纹理,选择一个编辑预设。
2025-07-26 03:02:00
359
原创 【模式】行为树
假如上面的AI行为用状态机去实现,那么得在State中去判断条件然后切换行为,假如修改了行为组合、行为优先级、行为条件,得去修改这个状态的代码,这样非常不便。由上面代码可知,行为树是按照树状结构,组合了一套自定义的AI行为,优先干什么,条件是什么都预先设定好。修改或增强子节点的行为,例如重复执行子节点、反转子节点结果、限制子节点执行时间或次数。序列节点(Sequence):按顺序执行所有子节点,若任一失败则终止。动作节点(Action):执行游戏角色的具体动作(如移动、攻击)。没有攻击,则执行巡逻序列。
2025-07-20 17:39:00
610
原创 状态机(有限状态机、并发状态机、层次状态机)
2. 可以知道状态from-to,知道是从哪个状态向哪个状态进行切换,可以进行一些前置操作,例如在游戏暂停时重新开始游戏,可以在切换前重置游戏数据。使用状态机,可以避免使用if-else/switch-case进行逻辑的条件判断,导致代码臃肿,难以维护,扩展性差。游戏状态:初始化、开始、暂停、恢复、下一波敌人、3选1技能、失败、胜利、退出游戏等。但是角色的状态,行走、攻击、跳跃等是可以并行的,例如行走并攻击,跳跃并攻击。游戏流程的状态是单一的,从初始化,开始,结束等状态都只会同时存在一个。
2025-07-20 14:48:00
1496
原创 【模式】状态机(有限状态机、并发状态机、层次状态机)
2. 可以知道状态from-to,知道是从哪个状态向哪个状态进行切换,可以进行一些前置操作,例如在游戏暂停时重新开始游戏,可以在切换前重置游戏数据。使用状态机,可以避免使用if-else/switch-case进行逻辑的条件判断,导致代码臃肿,难以维护,扩展性差。游戏状态:初始化、开始、暂停、恢复、下一波敌人、3选1技能、失败、胜利、退出游戏等。但是角色的状态,行走、攻击、跳跃等是可以并行的,例如行走并攻击,跳跃并攻击。游戏流程的状态是单一的,从初始化,开始,结束等状态都只会同时存在一个。
2025-07-20 14:48:00
809
原创 一个开源 Cocos3.x Shader集合
一个开源的cocos3.x shader集合,将很多shader实现收集并整理。记录一下,以后用到可以查找来用。
2025-07-18 14:46:00
188
原创 【Shader】一个开源 Cocos3.x Shader集合
论坛别人分享的一个开源的cocos3.x shader集合,将很多shader实现收集并整理。记录一下,以后用到可以查找来用。
2025-07-18 14:46:00
111
原创 Cocos3.x 动态合图
当多个小纹理(Sprite)被合并到一个大纹理(Atlas)中时,由于 纹理滤波(Texture Filtering,如线性插值) 或 纹理坐标舍入误差,相邻的小纹理可能会在边缘处出现 颜色渗色(Bleeding),即本不属于它的像素被显示出来。若要复用,必须修改源码,效仿char模式,char模式能复用是因为使用文字的颜色、尺寸、字体等属性hashCode后作为识别缓存的key值,缓存[code] = 图片,每次hashCode值一致,所以能复用。Bitmap模式可以,使用描边、阴影、加粗后都能合图。
2025-07-15 14:27:00
810
原创 【工具】Cocos3.x 动态合图
若要复用,必须修改源码,效仿char模式,char模式能复用是因为使用文字的颜色、尺寸、字体等属性hashCode后作为识别缓存的key值,缓存[code] = 图片,每次hashCode值一致,所以能复用。例如下图,一个弹窗中有一个Bitmap模式的Label,内容是“Bitmap文本”,当不停的打开和关闭这个弹窗时,文本内容会重复的进行动态合图。例如下图,是物品的自动图集,即使场景中只使用了金币,但是自动合图会将整个图集合并,包括武器、钥匙都会合并到自动合图中,而不是只合并金币。
2025-07-15 14:27:00
999
原创 MVC、MVP、MVVM、VM
最简的框架了,在cocos论坛里讨论过,很多人表示适用于小型项目开发快,没有了control层, View里直接调用Model获取数据或发送请求。和mvc相比,presenter其实就是control,只是数据变更后没有派发事件更新UI,而是直接调用UI。Model:Model、Control集合体,同时处理数据、请求、逻辑等,只要不是View界面的都在这里处理。mvc算是比较常见的框架了,开源的就有puremvc,分三层也算合理,不会某一层代码特别多。也可以当作View+Model,反正差不多。
2025-07-11 21:18:00
417
原创 MVC、MVP、MVVM、MV
最简的框架了,在cocos论坛里讨论过,很多人表示适用于小型项目开发快,没有了control层, View里直接调用Model获取数据或发送请求。和mvc相比,presenter其实就是control,只是数据变更后没有派发事件更新UI,而是直接调用UI。Model:Model、Control集合体,同时处理数据、请求、逻辑等,只要不是View界面的都在这里处理。mvc算是比较常见的框架了,开源的就有puremvc,分三层也算合理,不会某一层代码特别多。也可以当作View+Model,反正差不多。
2025-07-11 21:18:00
337
原创 MVC、MVP、MVVM、MV、MVM
和MVC对比,通过框架实现双向绑定,View变化自动更新ViewModel,ViewModel变化自动更新Model。和mvc对比,presenter其实就是control,只是数据变更后没有派发事件更新UI,而是直接调用UI进行更新。和MVC对比,没有了control层, View里直接调用Model获取数据或发送请求,Model派发事件更新UI。MVC就是Model、View、Control组成,开源框架有Puremvc。Presenter持有view和model,并调用Model请求登录,更新UI。
2025-07-11 21:18:00
366
原创 【模式】MVC、MVP、MVVM、MV、MVM
和MVC对比,通过框架实现双向绑定,View变化自动更新ViewModel,ViewModel变化自动更新Model。和mvc对比,presenter其实就是control,只是数据变更后没有派发事件更新UI,而是直接调用UI进行更新。和MVC对比,没有了control层, View里直接调用Model获取数据或发送请求,Model派发事件更新UI。MVC就是Model、View、Control组成,开源框架有Puremvc。Presenter持有view和model,并调用Model请求登录,更新UI。
2025-07-11 21:18:00
443
原创 TCP、UDP、帧同步、状态同步
但是实际上玩英雄联盟、球球大作战之类,太卡的时候,仍会有移动忽快忽慢,瞬移。第三个逻辑帧B自杀了,客户端ABC都执行B自杀指令,那么客户端ABC上都会得到B自杀的计算结果,B死亡角色离开了游戏。第二个逻辑帧C放技能,客户端ABC都执行放技能指令,那么客户端ABC上都会得到C放技能的计算结果,C放了一个火球术。例如第一个逻辑帧A移动,客户端ABC都执行移动指令,那么客户端ABC上都会得到A移动的计算结果,A移动了10像素。客户端为了玩家体验,减少延迟感,会先行进行预测,提前模拟执行操作指令,例如移动,射击。
2025-07-11 19:16:00
1196
原创 【技术点】TCP、UDP、帧同步、状态同步
但是实际上玩英雄联盟、球球大作战之类,太卡的时候,仍会有移动忽快忽慢,瞬移。第三个逻辑帧B自杀了,客户端ABC都执行B自杀指令,那么客户端ABC上都会得到B自杀的计算结果,B死亡角色离开了游戏。第二个逻辑帧C放技能,客户端ABC都执行放技能指令,那么客户端ABC上都会得到C放技能的计算结果,C放了一个火球术。例如第一个逻辑帧A移动,客户端ABC都执行移动指令,那么客户端ABC上都会得到A移动的计算结果,A移动了10像素。客户端为了玩家体验,减少延迟感,会先行进行预测,提前模拟执行操作指令,例如移动,射击。
2025-07-11 19:16:00
799
原创 对象池 (Egret、Laya、Cocos)
根据需求自定义了一个对象池类Pool.ts,通过传入Class来获取实例,内部已经写好预制体Prefab的创建。cocos中的对象池NodePool.ts,并没有创建预制体Prefab的代码,只能存放和获取已有的node。对象池是预先创建并管理可重复使用的对象,适用于频繁创建和销毁同类对象的场景。由上面可知,对象池需要如下几个功能,但是cocos自带对象池并不满足需求。Laya的对象池里也没有创建实例的代码,只能获取和回收已有的实例。对象池就是个列表保存实例,需要的时候拿出来用,用完再放回去。
2025-07-11 14:21:00
342
原创 【工具】对象池 (Egret、Laya、Cocos)
根据需求自定义了一个对象池类Pool.ts,通过传入Class来获取实例,内部已经写好预制体Prefab的创建。cocos中的对象池NodePool.ts,并没有创建预制体Prefab的代码,只能存放和获取已有的node。对象池是预先创建并管理可重复使用的对象,适用于频繁创建和销毁同类对象的场景。由上面可知,对象池需要如下几个功能,但是cocos自带对象池并不满足需求。Laya的对象池里也没有创建实例的代码,只能获取和回收已有的实例。对象池就是个列表保存实例,需要的时候拿出来用,用完再放回去。
2025-07-11 14:21:00
503
原创 记录下近2年和开发steam游戏
离职后,在深圳考了3个多月驾照,没有面试,深圳消费太高,房租吃饭要6k左右,打算先回老家桂林,有面试再坐高铁去面。原定预期开发4个多月上线。由于产品不写策划案,没有工作和版本计划种种原因,半年多了只上线了一个demo版本。和负责人说了这些方面的问题,希望可以提高效率,但是未果,仍然没有策划案,也没有工作版本计划。我是0薪水+25%项目分成,1分钱没有经济压力太大,2025年3月离开了。2023年4月深圳公司裁员了,项目没有盈利,好几个项目组都解散了。原定4个月的项目,至今已经11个月了,仍然没有上线。
2025-06-23 12:52:00
217
原创 【工具】图片压缩(tinypng、pngquant、洋芋田)
pngquant:有windos版本下载,压缩png可以,压缩jpg比较坑,越压越大,而且图片部分失真。tinypng:jpg和png都可压缩,压缩后肉眼看上去差别不大,但是得在线压缩,不太方便。洋芋田:有windos版本下载,压缩png可以,压缩jpg越压越大,但是图片并未失真。pngquant压缩的bg.jpg,可以看到部分地方蓝色变成了黑色。根据江南百景图的测试,他们最终决定用pngquant进行压缩。limitpng:无法压缩jpg,而且一次最多只能压缩6张。图压:压缩jpg是黑白得,无法看。
2025-06-10 12:02:00
394
原创 【工具】图片压缩(tinypng、pngquant、洋芋田、Caesium)
洋芋田:压缩png可以,压缩jpg越压越大,但是图片并未失真。tinypng:jpg和png都可压缩,压缩后肉眼看上去差别不大,但是得在线压缩,不太方便。pngquant:压缩png可以,压缩jpg比较坑,越压越大,而且图片部分失真。百度了一些其它压缩方式,例如洋芋田、limitpng、图压、迅捷压缩。limitpng:无法压缩jpg,而且一次最多只能压缩6张。Caesium,免费,桌面版,可同时压缩jpg和png。迅捷压缩:需要付费,不然只能压缩很小的文件。图压:压缩jpg是黑白得,无法看。
2025-06-10 12:02:00
599
原创 【问题】cocos3.x 热更新后重启但是还是老资源的问题
重启后在扩展管理器中看到这2个插件生效才行。这样在每次构建结束后,插件才会给main.js附加上搜索路径设置的逻辑。经过一阵查找发现是main.js里没有写搜索路径那段代码,原来是官方的热更插件没生效,要插件生效得重启cocos。以前热更新没啥问题,重新换了一台机器整了一遍,发现热更新后重启app还是老资源。复制插件到文件夹extensions后,重启cocos。
2025-03-27 01:34:00
202
原创 Cocos3.x 在VS Code中断点调试
在cocos编辑器中,开发者 - Visual Studio Code工作流 - 添加Chrome debug配置。选择vscode左侧边栏第四个运行和调试(下图中蓝色圆圈1的那个按钮),可以查看变量和堆栈、断点等信息。旧版vscode需要下载插件Debugger for Chrome。在代码行数左侧点击可以增加一个断点。
2024-11-05 23:39:00
268
原创 【工具】Cocos3.x 在VS Code中断点调试
在cocos编辑器中,开发者 - Visual Studio Code工作流 - 添加Chrome debug配置。虽然可以在vscode中断点调试,但是一般不用,基本都是在chrome里调试,因为可以对着游戏画面调试。选择vscode左侧边栏第四个运行和调试(下图中蓝色圆圈1的那个按钮),可以查看变量和堆栈、断点等信息。旧版vscode需要下载插件Debugger for Chrome。在代码行数左侧点击可以增加一个断点。
2024-11-05 23:39:00
189
原创 Cocos3.x中 console的API使用
仅在 Firefox,web 控制台的日志中的项目旁边会显示一个小的‘I‘图标。time启动计时,timeEnd结束计时并输出时间,timeLog计时启动后输出当前计时时间。该方法和console.log(obj)区别不大,都能查看属性,只是输出略有不同。%f能接收整数和浮点数,18和18.88都能打印,而且打印18和%d显示没有差别。只有该消息级别才能查看输出信息,对应"debug"或"verbose"级别。%d只能接收整数,如果是18.88,只会打印18。控制台输出一条信息,最常用的输出手段。
2024-10-26 09:23:00
463
原创 【工具】Cocos3.x中 console的API使用
仅在 Firefox,web 控制台的日志中的项目旁边会显示一个小的‘I‘图标。time启动计时,timeEnd结束计时并输出时间,timeLog计时启动后输出当前计时时间。该方法和console.log(obj)区别不大,都能查看属性,只是输出略有不同。%f能接收整数和浮点数,18和18.88都能打印,而且打印18和%d显示没有差别。只有该消息级别才能查看输出信息,对应"debug"或"verbose"级别。%d只能接收整数,如果是18.88,只会打印18。控制台输出一条信息,最常用的输出手段。
2024-10-26 09:23:00
596
原创 cocos3.x 血条制作
白色血量直接显示伤害后血量,暗红血条显示第一次伤害前血量位置,浅红血条显示连击的每次伤害血量位置。间隔一小段时间,浅红血条和白色血条一样长,无连击一小段时间后,暗红血条缓动到和白色血条一样长。喝药时受伤害,绿色血条消失,白色血条直接显示当当前生命位置,走暗红和浅色血条逻辑。1 当前血量100,第一次伤害10,白色血条90,暗红血条100,浅红血条100。2 第二次伤害10,白色血条80,暗红血条100,浅红血条90。3 第三次伤害10,白色血条70,暗红血条100,浅红血条80。白色血条:当前生命值。
2024-10-13 11:12:00
458
原创 【工具】cocos3.x 血条制作
白色血量直接显示伤害后血量,暗红血条显示第一次伤害前血量位置,浅红血条显示连击的每次伤害血量位置。间隔一小段时间,浅红血条和白色血条一样长,无连击一小段时间后,暗红血条缓动到和白色血条一样长。喝药时受伤害,绿色血条消失,白色血条直接显示当当前生命位置,走暗红和浅色血条逻辑。1 当前血量100,第一次伤害10,白色血条90,暗红血条100,浅红血条100。2 第二次伤害10,白色血条80,暗红血条100,浅红血条90。3 第三次伤害10,白色血条70,暗红血条100,浅红血条80。白色血条:当前生命值。
2024-10-13 11:12:00
430
原创 禅道的安装和使用
MySQL默认账户:root 密码:123456,不能用默认的,必须大写字母+小写字母+数字,我这里设置为ZenTao123。4个服务都安装完成后,点击访问禅道,只能打开一个空白界面127.0.0.1/index.php。点击ZenTao.exe进行安装,开源版依次安装Apache、MySQL、XXD、RR。解压缩到指定文件夹,这个文件夹就是禅道安装目录,不要放桌面。后台-用户-添加用户,即可添加用户名、密码、权限等等。点击访问禅道,可以看到有登录界面了。把禅道关掉,然后再打开就行了。
2024-10-13 00:23:00
291
原创 【工具】禅道的安装和使用
MySQL默认账户:root 密码:123456,不能用默认的,必须大写字母+小写字母+数字,我这里设置为ZenTao123。4个服务都安装完成后,点击访问禅道,只能打开一个空白界面127.0.0.1/index.php。点击ZenTao.exe进行安装,开源版依次安装Apache、MySQL、XXD、RR。解压缩到指定文件夹,这个文件夹就是禅道安装目录,不要放桌面。后台-用户-添加用户,即可添加用户名、密码、权限等等。点击访问禅道,可以看到有登录界面了。把禅道关掉,然后再打开就行了。
2024-10-13 00:23:00
297
原创 cocos3.x 攻击闪白shader
在vscode中打开 atk-write-sprite.effect,在properties中增加亮度light属性和亮度色彩lightColor。选择atk-write-sprite-material,把Effect属性设置为atk-write-sprite.effect。在场景中放入一张图片,并给图片的material属性赋值atk-write-sprite-material.mtl。用uniform定义light和lightColor,并将原来的颜色o乘以亮度和亮度颜色。代码中实现闪白和闪红效果。
2024-10-10 23:01:00
375
原创 【Shader】cocos3.x 攻击闪白shader
在vscode中打开 atk-write-sprite.effect,在properties中增加亮度light属性和亮度色彩lightColor。选择atk-write-sprite-material,把Effect属性设置为atk-write-sprite.effect。在场景中放入一张图片,并给图片的material属性赋值atk-write-sprite-material.mtl。用uniform定义light和lightColor,并将原来的颜色o乘以亮度和亮度颜色。代码中实现闪白和闪红效果。
2024-10-10 23:01:00
398
原创 Cocos3.x 循环引用报错 TypeError: Class extends value undefined is not a constructor or null
循环引用报错,TypeError: Class extends value undefined is not a constructor or null。原因是 gameFactory -> pokerCard -> gameMode-> gameFactory -> pokerCard 导致循环引用。解决方法,不能在gameMode数据类中直接使用视图相关代码,数据层不应该使用视图层的对象。
2024-09-25 21:27:00
455
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅