当前位置: 首页 > article >正文

Cocos笔记

Cocos笔记好用的Api碰撞体范围检测包围盒范围检测(性能对比碰撞检测稍好)多边形碰撞体和矩形相交检测设置父节点并同步位置外部增加并调用回调函数网址其他代码混淆工具引用加载过久修改tsconfig.json脚本增加以下代码类型写法(举例)刮刮乐脚本修改后的挖图(用于引导挖多个空)增加恒久根节点游戏事件(看广告相关)自定义事件派发等比计算进度条基于oops的音频管理优化版DialogAudioSourceDialogAudio剔除以.meta结尾的文件加载bundle和使用bundle加载资源网上下载图片加载剔除闪频打包后html文件运行不了问题监控node节点父物体变化的情况cocos对象池bundle加载时进度输出制作放缩地图制作循坏摇摆的动画加载场景时进度条获取当天0点的时间将毫秒转为时分秒的格式(最小单位为秒,如:"00:01:59")通过Bound获取包围节点加载进度管理音效播放带手指偏移的物体移动点击mask区域无反应优化方案点击事件传递数据存储兼容老数组打散数组tween的监测更新分帧生成处理类通过代理获取"[]"数据精确到小数点后两位且不填充0(可优化位数)动画修改插槽获取向上移动像素后的坐标动画回调游戏后台暂停监听按钮事件监听全局点击事件(计算空闲点击)监听鼠标点击事件输出文件的md5哈希值使用的上传工具打包小游戏预览骨骼动画取消异步失败返回没有catch接收的黑色弹窗(报错)修改引用查询(防止引用过多加载时间过长)同时多个异步等待后端通信加密取消tween的Node节点绑定(3.8.7版本新增)取消h5页面ScrollView组件的鼠标滚轴滑动好用的Api碰撞体范围检测checkCollider(){letcollider=this.node.getComponent(BoxCollider2D);if(!collider)returnnull;// 获取目标节点碰撞体的世界坐标范围letworldBounds=collider.worldAABB;// 测试与周围矩形范围相交的所有碰撞体letcolliders=PhysicsSystem2D.instance.testAABB(worldBounds);// 处理碰撞结果for(leti=colliders.length-1;i=0;i--){letotherCollider=colliders[i];letcolParent=otherCollider.getComponent(ReceiveController);//TODO 这里写碰撞体处理的代码}}/**调整后的包围盒大小 */getAdjustedBoundingBox(node:Node){// 获取节点的包围盒letboundingBox=node.getComponent(UITransform)!.getBoundingBoxToWorld();letoffset=3;// 调整包围盒的宽度和高度boundingBox.width-=offset;boundingBox.height-=(offset+10);// 可选:调整包围盒的位置,使其仍然居中//boundingBox.x += offset/2;boundingBox.y+=5;returnboundingBox;}包围盒范围检测(性能对比碰撞检测稍好)myWidth=0;myHeight=0;protectedonLoad():void{constmyTransform=this.node.getComponent(UITransform);this.myWidth=myTransform.width;this.myHeight=myTransform.height;}checkItem(){letnodeArr=this.getAllRect();if(!nodeArr||nodeArr.length==0){this.setMask(false);return;}letthisGray=false;// 处理碰撞结果for(leti=0;inodeArr.length;i++){letotherNode=nodeArr[i];letotherControl=otherNode.getComponent(eliminateItemController);letotherLayer=otherNode.getSiblingIndex();letmyLayer=this.node.getSiblingIndex();//处理层级置灰问题if(otherLayermyLayer){if(!otherControl.getMaskGray()){otherControl.setMask(true);}}elseif(otherLayermyLayer){//其他物体盖在上面将自己置灰if(!this.getMaskGray()){this.setMask(true);}thisGray=true;}//otherControl.checkCompleteOcclusion();}if(!thisGray){this.setMask(false);}}getAllRect(){letnodes=[];letboundingBox=this.getAdjustedBoundingBox(this.node);for(leti=0;ithis.node.parent.children.length;i++){letitem=this.node.parent.children[i];if(this.checkPosition(item.position)){if(item!==this.node){// 获取当前节点的包围盒letnodeBoundingBox=this.getAdjustedBoundingBox(item);letcomp=item.getComponent(eliminateItemController);// 检查包围盒是否相交if(compboundingBox.intersects(nodeBoundingBox)){nodes.push(item);}}}}returnnodes;}/**首先判断位置 */checkPosition(targetPos:Vec3):boolean{if(targetPos.xthis.node.position.x+this.myWidth){// 物体在右侧returnfalse}elseif(targetPos.xthis.node.position.x-this.myWidth){// 物体在左侧returnfalse}elseif(targetPos.ythis.node.position.y+this.myHeight){// 物体在上方returnfalse}elseif(targetPos.ythis.node.position.y-this.myHeight){// 物体在下方returnfalse}else{returntrue;}}/**调整后的包围盒大小 */getAdjustedBoundingBox(node:Node){// 获取节点的包围盒letboundingBox=node.getComponent(UITransform)!.getBoundingBoxToWorld();letoffset=3;// 调整包围盒的宽度和高度boundingBox.width-=offset;boundingBox.height-=(offset+10);// 可选:调整包围盒的位置,使其仍然居中//boundingBox.x += offset/2;boundingBox.y+=10;returnboundingBox;}getMaskGray(){returnthis.maskNode.active;}setMask(val){this.maskNode.active=val;}多边形碰撞体和矩形相交检测letcheckBox=this.node.getChildByName("checkBox");letwbox=checkBox.getComponent(UITransform).getBoundingBoxToWorld();letglassNode=childLayer.children[j].getChildByName("glassSp");letcol:PolygonCollider2D=glassNode.getComponent(PolygonCollider2D);//这个Intersection2D也可以用于其他形状的检测if(Intersection2D.rectPolygon(wbox,col.worldPoints)){canClick=false;break;}设置父节点并同步位置setParent(parent){letworldPos=this.node.getWorldPosition();// 改变父节点this.node.setParent(parent);// 转换世界坐标为相对于新父节点的局部坐标letlocalPos=parent.getComponent(UITransform).convertToNodeSpaceAR(worldPos);// 应用新的局部坐标this.node.setPosition(localPos);}外部增加并调用回调函数//渲染事件(渲染器)@property({type:[EventHandler],})publicclickEvent=[];callBack(){for(leti=0;ithis.clickEvent.length;i++){this.clickEvent[i].emit([this.node]);}}网址creator示例地址混淆工具网址其他代码混淆工具混淆工具网址引用加载过久修改tsconfig.json脚本增加以下代码"include":["assets/**/*"],"exclude":["node_modules","temp","extensions","build","dist"]类型写法(举例)@property({type:[Node],visible(){returnthis.articles==ArticlesObj.ClidkObj;},tooltip:'执行完毕后将数组内物体Active打开'})addObjects:Node[]=[];刮刮乐脚本import{_decorator,Component,v2,Node,UITransform,CCBoolean,CCFloat,Graphics,Mask,Vec3,typeVec2}from'cc';constHANG_MAX=14;const{ccclass,property}=_decorator;@ccclass('ScrapeImg')exportclassScrapeImgextendsComponent{@property(CCBoolean)canTouch:boolean=false;@property({type:CCFloat,tooltip:'当前遮罩的编号,画完时进行广播'})maskIndex:number=0;@property({tooltip:'勾选绘制圆形,取消绘制矩形'})isCircle=true;@property(Node)myMask:Node=null;@property({type:Node,tooltip:'检测区域的节点'})checkNode:Node=null;@property({min:20,tooltip:"绘制圆形半径",visible(){returnthis.isCircle;},})size:number=30;@property({min:20,tooltip:"绘制矩形宽度",visible(){return!this.isCircle;},})width:number=30;@property({min:20,tooltip:"绘制矩形长度",visible(){return!this.isCircle;},})height:number=30;@property({tooltip:"分片后阈值:\n结果判断会依赖此值"})value=40;protectedpositionProgress:Boolean[]=[];protectedpositions:Vec2[]=[];graphics:Graphics;finish=false;onLoad(){if(this.canTouch){this.node.on(Node.EventType.TOUCH_START,this._onTouchBegin,this);this.node.on(Node.EventType.TOUCH_MOVE,this._onTouchMoved,this);this.node.on(Node.EventType.TOUCH_END,this._onTouchEnd,this);}this.graphics=this.myMask.getComponent(Graphics);//不反向就填充if(!this.myMask.getComponent(Mask).inverted){this.graphics.circle(0,0,0);this.graphics.close();this.graphics.stroke();this.graphics.fill();}//检测区域this.positions=[];this.checkNode.children.forEach((item)={this.positions.push(v2(item.position.x,item.position.y));});this.positionProgress=newArray(this.positions.length);}_onTouchBegin(event){letlocation=event.getUILocation();letposVec3=newVec3(location.x,location.y,0);letpoint=this.node.getComponent(UITransform).convertToNodeSpaceAR(posVec3);this._addGraphics(point);}_onTouchMoved(event){letlocation=event.getUILocation();letposVec3=newVec3(location.x,location.y,0);letpoint=this.node.getComponent(UITransform).convertToNodeSpaceAR(posVec3);this._addGraphics(point);this._checkProgress();}_onTouchEnd(event){letlocation=event.getUILocation();letposVec3=newVec3(location.x,location.y,0);letpoint=this.node.getComponent(UITransform).convertToNodeSpaceAR(posVec3);this._addGraphics(point);this._checkProgress();}drawGraphics(pos){lettranfrom=this.node.getComponent(UITransform);letnodePos=tranfrom.convertToNodeSpaceAR(pos);if(this._checkBound(v2(nodePos.x,nodePos.y))){this.node.dispatchEvent(newValueNotification(Events.checkStage,true,this.maskIndex));}this._addGraphics(nodePos);this._checkProgress();}checkBound(pos){lettranfrom=this.node.getComponent(UITransform);letnodePos=tranfrom.convertToNodeSpaceAR(pos);if(this._checkBound(v2(nodePos.x,nodePos.y))){this.node.dispatchEvent(newValueNotification(Events.checkStage,true,this.maskIndex));}}/**绘制函数*/_addGraphics(point){if(!this.graphics)return;this.graphics.lineWidth=10;if(this.isCircle)this.graphics.circle(point.x,point.y,this.size);elsethis.graphics.rect(point.x-this.width/2,point.y-this.height/2,this.width,this.height);this._checkPoint(point);//3.8.2使用this.graphics.close();this.graphics.stroke();this.graphics.fill();//下面是3.8.3及以上使用//fillRect()也行不过用之前先clear()}private_checkPoint(point:Vec2){for(leti=0;ithis.positions.length;i++){letp=this.positions[i];// 此点在关键点附近if(p.x+this.valuepoint.xp.x-this.valuepoint.xp.y+this.valuepoint.yp.y

相关文章:

Cocos笔记

Cocos笔记 好用的Api 碰撞体范围检测 包围盒范围检测(性能对比碰撞检测稍好) 多边形碰撞体和矩形相交检测 设置父节点并同步位置 外部增加并调用回调函数 网址 其他 代码混淆工具 引用加载过久修改tsconfig.json脚本增加以下代码 类型写法(举例) 刮刮乐脚本 修改后的挖图(…...

千问3.5-2B应用场景:高校实验报告图解、科研论文插图说明生成、技术文档辅助

千问3.5-2B应用场景:高校实验报告图解、科研论文插图说明生成、技术文档辅助 1. 千问3.5-2B模型简介 千问3.5-2B是Qwen系列中的小型视觉语言模型,专为图片理解与文本生成任务设计。这个模型的核心能力在于:你上传一张图片,再输入…...

Agentic SOC 全阶成长指南:从零到专家,拿下AI安全运营的黄金赛道

2026年RSAC全球网络安全大会落下帷幕,一个行业共识已经不可逆地形成:Agentic SOC,已经从概念验证阶段,正式成为全球企业安全运营的核心标配。 Gartner最新数据显示,2026年全球Agentic SOC相关市场规模突破127亿美元&am…...

微信聊天记录丢了别慌!3步教你用开源工具找回珍贵回忆

微信聊天记录丢了别慌!3步教你用开源工具找回珍贵回忆 【免费下载链接】WechatBakTool 基于C#的微信PC版聊天记录备份工具,提供图形界面,解密微信数据库并导出聊天记录。 项目地址: https://gitcode.com/gh_mirrors/we/WechatBakTool …...

城通网盘下载速度慢?试试ctfileGet,让你畅享本地高速解析体验

城通网盘下载速度慢?试试ctfileGet,让你畅享本地高速解析体验 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 在数字化办公与学习中,网盘已成为文件传输的重要工具。…...

数据科学好帮手:OpenClaw+千问3.5-35B-A3B-FP8自动化报表分析与可视化

数据科学好帮手:OpenClaw千问3.5-35B-A3B-FP8自动化报表分析与可视化 1. 为什么需要自动化数据分析 作为一名经常与数据打交道的分析师,我每天要处理大量重复性工作:清洗CSV文件、检查异常值、生成趋势图表、编写分析报告。这些工作占用了7…...

3步搞定知识星球爬虫:让付费知识变成你的私人电子书库

3步搞定知识星球爬虫:让付费知识变成你的私人电子书库 【免费下载链接】zsxq-spider 爬取知识星球内容,并制作 PDF 电子书。 项目地址: https://gitcode.com/gh_mirrors/zs/zsxq-spider 你是否在知识星球上订阅了多个优质专栏,却苦于无…...

告别混乱桌面:Sticky如何让Linux用户的灵感管理效率提升300%

告别混乱桌面:Sticky如何让Linux用户的灵感管理效率提升300% 【免费下载链接】sticky A sticky notes app for the linux desktop 项目地址: https://gitcode.com/gh_mirrors/stic/sticky 你是否也曾经历过这样的场景:重要会议记录随手记在纸巾上…...

PyPika数据分析利器:如何使用聚合函数和分组查询

PyPika数据分析利器:如何使用聚合函数和分组查询 【免费下载链接】pypika PyPika is a python SQL query builder that exposes the full richness of the SQL language using a syntax that reflects the resulting query. PyPika excels at all sorts of SQL quer…...

抖音批量下载工具终极指南:从零开始掌握高效内容采集

抖音批量下载工具终极指南:从零开始掌握高效内容采集 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback suppor…...

Feather生态系统探索:从R包到Python包装器的完整技术栈

Feather生态系统探索:从R包到Python包装器的完整技术栈 【免费下载链接】feather wesm/feather: 是一个用于在 Python 和 R 之间传输数据的轻量级数据格式库。适合对数据科学和数据分析有兴趣的人,特别是需要在 Python 和 R 之间进行数据交换的人。特点是…...

跨平台资源下载终极指南:一键获取视频号、抖音、快手等全网资源

跨平台资源下载终极指南:一键获取视频号、抖音、快手等全网资源 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 在…...

收藏必备!小白程序员轻松入门大模型:从零排查RAG检索问题

本文针对RAG系统上线后常见的检索问题,提出了从源头到后处理的排查思路。文章首先强调文档入库的重要性,接着深入分析向量化和检索召回环节的常见错误,如模型不一致、表述差异等,并给出解决方案。最后,文章还关注排序和…...

语音转文字神器:Speech Seaco Paraformer镜像快速部署与实战技巧

语音转文字神器:Speech Seaco Paraformer镜像快速部署与实战技巧 1. 引言:为什么选择Speech Seaco Paraformer 在日常工作和学习中,我们经常需要将会议录音、访谈内容或课程讲解转换成文字。传统的人工转录不仅耗时耗力,而且成本…...

质因数分解

题面 给定整数 a,b,如果 a%b0,则称 b 是 a 的因数。 现在给定一个整数 n,计算整数 n 的阶乘的因数个数。 输入格式: 一行输入一个整数 n(1≤n≤50)。 输出格式: 输出一个整数,表示 n! 的因数个数。 输入样例: 5 输出样例:…...

Qwen2.5-VL-7B-Instruct效果对比:vs InternVL2、LLaVA-1.6在中文场景表现

Qwen2.5-VL-7B-Instruct效果对比:vs InternVL2、LLaVA-1.6在中文场景表现 1. 多模态视觉-语言模型概述 Qwen2.5-VL-7B-Instruct是阿里云推出的新一代多模态视觉-语言模型,专为中文场景优化设计。该模型能够同时理解图像和文本输入,并生成符…...

开源工具Unlock Music:重获音频自由的完整指南

开源工具Unlock Music:重获音频自由的完整指南 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: https://gitc…...

Formbricks v3.5.0发布:移动端体验革命与缓存性能倍增

Formbricks v3.5.0发布:移动端体验革命与缓存性能倍增 【免费下载链接】formbricks Open Source Qualtrics Alternative 项目地址: https://gitcode.com/GitHub_Trending/fo/formbricks Formbricks作为一款开源的Qualtrics替代方案,在v3.5.0版本中…...

如何免费解锁百度网盘SVIP下载:Mac版终极加速指南

如何免费解锁百度网盘SVIP下载:Mac版终极加速指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘缓慢的下载速度而烦恼吗&a…...

C++ STL 容器选型实战:vector/list/map/unordered_map 性能对比与选型指南

一、前言:为什么容器选型是 C 工程的核心?在 C 后端开发、Qt 桌面应用、高性能服务器、嵌入式系统、游戏引擎、实时仿真、数据分析等几乎所有工业级项目中,STL 容器的选型直接决定程序性能、内存占用、可维护性与稳定性。很多开发者习惯随手写…...

攻克R2R数据迁移难关:PostgreSQL数据库无缝升级实战指南

攻克R2R数据迁移难关:PostgreSQL数据库无缝升级实战指南 【免费下载链接】R2R SoTA production-ready AI retrieval system. Agentic Retrieval-Augmented Generation (RAG) with a RESTful API. 项目地址: https://gitcode.com/GitHub_Trending/r2/R2R R2R作…...

HS2-HF Patch汉化补丁:3分钟实现Honey Select 2游戏完全汉化

HS2-HF Patch汉化补丁:3分钟实现Honey Select 2游戏完全汉化 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 如果你正在寻找一款能够彻底解决Honey …...

Baichuan-7B模型压缩终极指南:如何在保持性能的同时大幅减小模型体积

Baichuan-7B模型压缩终极指南:如何在保持性能的同时大幅减小模型体积 【免费下载链接】Baichuan-7B A large-scale 7B pretraining language model developed by BaiChuan-Inc. 项目地址: https://gitcode.com/gh_mirrors/ba/Baichuan-7B Baichuan-7B是由百川…...

Leantime容器化部署实战指南:从环境搭建到生产运维

Leantime容器化部署实战指南:从环境搭建到生产运维 【免费下载链接】docker-leantime Official Docker Image for Leantime https://leantime.io 项目地址: https://gitcode.com/gh_mirrors/do/docker-leantime 环境准备:部署前的必要检查 系统兼…...

仲景GPT:首个中医大语言模型如何革新传统医学诊疗?[特殊字符]

仲景GPT:首个中医大语言模型如何革新传统医学诊疗?🚀 【免费下载链接】CMLM-ZhongJing 首个中医大语言模型——“仲景”。受古代中医学巨匠张仲景深邃智慧启迪,专为传统中医领域打造的预训练大语言模型。 The first-ever Traditio…...

sing-box性能调优:从内存占用到吞吐量的全面优化

sing-box性能调优:从内存占用到吞吐量的全面优化 引言 sing-box作为通用代理平台(The universal proxy platform),在高并发网络环境下的性能表现直接影响用户体验。本文将从内存管理、连接复用、吞吐量优化三个维度,…...

sing-box常见问题排查:99%的用户都会遇到的坑

sing-box常见问题排查:99%的用户都会遇到的坑 引言 sing-box作为一款功能强大的通用代理平台(The universal proxy platform),在使用过程中难免会遇到各种问题。本文将针对用户最常遇到的配置错误、连接失败、日志分析等问题提供…...

STEP3-VL-10B一文详解:多模态对齐损失函数设计与人类反馈强化学习细节

STEP3-VL-10B一文详解:多模态对齐损失函数设计与人类反馈强化学习细节 1. 引言:为什么一个“小”模型能比肩“大”模型? 最近,一个只有100亿参数的“小”模型在技术圈里引起了不小的轰动。它就是阶跃星辰开源的STEP3-VL-10B。你…...

告别环境冲突:用快马平台标准化流程高效集成openclaw模型

在AI模型开发中,环境配置和模型部署往往是效率瓶颈。最近尝试用InsCode(快马)平台集成openclaw模型时,发现它通过标准化流程解决了三个关键痛点,分享下具体实践: 环境配置自动化 传统本地部署需要手动安装CUDA、PyTorch等依赖&…...

零基础部署Nanbeige 4.1-3B:Streamlit极简UI手把手教程

零基础部署Nanbeige 4.1-3B:Streamlit极简UI手把手教程 如果你对本地运行大语言模型感兴趣,但又被复杂的命令行界面和简陋的Web界面劝退,那么今天这篇文章就是为你准备的。我们将一起完成一个既好看又好用的本地AI对话界面的部署&#xff0c…...