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

Laya 如何检测矩形和圆形的碰撞?

如何检测矩形和圆形的碰撞1.画一个黄色矩形和一个蓝色圆形再放置一个旋转的按钮。2.拖动黄色矩形当矩形碰到圆形时圆形会变为绿色。3.通过旋转按钮改变矩形旋转角度再次碰撞亦可变为绿色。Laya的实现代码如下exportdefaultclass HitRect extends Laya.Sprite{public w:number100;public h:number50;public r:number40;public spRect:Laya.Sprite;public spCircle:Laya.Sprite;constructor(){super();}publicdraw():void{this.spRectnew Laya.Sprite();this.spRect.widththis.w;this.spRect.heightthis.h;this.spRect.graphics.drawRect(0,0,this.w,this.h,0xffff00);this.addChild(this.spRect);this.spRect.mouseEnabledtrue;this.spRect.on(Laya.Event.MOUSE_DOWN,this,this.mouseDown);this.spRect.rotation0;this.spRect.x0;this.spRect.y200;this.spRect.pivotXthis.w/2;this.spRect.pivotYthis.h/2;this.spRect.graphics.drawCircle(this.spRect.pivotX,this.spRect.pivotY,6,0xff0000);this.spCirclenew Laya.Sprite();this.spCircle.graphics.drawCircle(0,0,this.r,0x00ffff);this.spCircle.x150;this.spCircle.y200;this.addChild(this.spCircle);let buttonnew Laya.Button();button.width80;button.skincomp/button.png;button.label旋转1;this.addChild(button);button.on(Laya.Event.MOUSE_DOWN,this,this.onButtonClick);let button5new Laya.Button();button5.skincomp/button.png;button5.x100;button5.label旋转5;this.addChild(button5);button5.on(Laya.Event.MOUSE_DOWN,this,this.onButtonClick5);}privateonButtonClick(e:Laya.Event){this.spRect.rotation1;}privateonButtonClick5(e:Laya.Event){this.spRect.rotation5;}privatemouseDown():void{this.spRect.on(Laya.Event.MOUSE_MOVE,this,this.mouseMove);this.spRect.stage.on(Laya.Event.MOUSE_UP,this,this.mouseUp);}privatemouseUp():void{this.spRect.off(Laya.Event.MOUSE_MOVE,this,this.mouseMove);this.spRect.stage.off(Laya.Event.MOUSE_UP,this,this.mouseUp);}privatemouseMove(evt:Laya.Event):void{this.spRect.xevt.stageX;this.spRect.yevt.stageY;let pos:anythis.getNewPos(this.spRect.x,this.spRect.y,this.spCircle.x,this.spCircle.y,this.spRect.rotation);let booolthis.ComputeCollision(this.w,this.h,this.r,pos.x,pos.y);if(boool){this.spCircle.graphics.drawCircle(0,0,this.r,0x00ff00);}else{this.spCircle.graphics.drawCircle(0,0,this.r,0x00ffff);}}/** * 计算碰撞 * param w 宽度 * param h 高度 * param rx 圆形x * param ry 圆形y */privateComputeCollision(w,h,r,rx,ry):boolean{var dxMath.min(rx,w*0.5);var dx1Math.max(dx,-w*0.5);var dyMath.min(ry,h*0.5);var dy1Math.max(dy,-h*0.5);return(dx1-rx)*(dx1-rx)(dy1-ry)*(dy1-ry)r*r;}privategetNewPos(x1,y1,x2,y2,rotation):any{var pos:any{};//距离var distanceMath.pow((Math.pow((x1-x2),2)Math.pow((y1-y2),2)),0.5);//角度var angle:numberMath.atan((y1-y2)/(x1-x2))*180/Math.PI;//兼容矩形的旋转角度var newAngleangle-rotation;pos.xMath.cos(newAngle/180*Math.PI)*distance;pos.yMath.sin(newAngle/180*Math.PI)*distance;returnpos;}}
http://www.gsyq.cn/news/1375740.html

相关文章:

  • Web安全 - 01SSL、TLS、HTTPS、证书和 CA
  • 基于多头自注意力机制的CICY流形自由商检测模型设计与实现
  • TikTokDownload深度实战:零门槛解锁抖音无水印下载秘籍
  • JMeter压测可信度提升指南:从环境配置到归因分析
  • Transformer加速辐射传输模拟:系外行星大气研究新范式
  • SAM模型实战:5分钟教你用Python+OpenCV玩转图像分割提示(点、框、文本都行)
  • PrediPrune:用机器学习加速编译器超级优化,编译时间减少12%
  • 如何通过kali 渗透 对面linux系统服务器?
  • 保姆级教程:用Sen2Cor-02.11.00批量处理Sentinel-2 L1C到L2A(附处理基线自动识别脚本)
  • 一张配置表驱动所有接口参数转换——省掉几千行重复代码
  • 嵌入式开发中LLM应用的挑战与优化实践
  • Ubuntu漏洞修复实战:CVE精准处置与USN驱动的生产级补丁策略
  • 统信UOS/麒麟KYLINOS系统管理员必看:三种禁用USB存储的实战方法对比与选择
  • HFSS的Solution type及其激励端口设置规则
  • Nidium:革命性移动硬件加速渲染引擎,一站式构建跨平台应用与游戏
  • 基于InfoVAE的类星体光谱生成与潜在空间物理关联探索
  • 动态临床轨迹整合:Cox与随机生存森林在肺癌预后预测中的实践对比
  • 珠海市2026年最新黄金回收TOP5排行榜:黄金回收白银回收铂金回收彩金回收门店诚信优选+联系方式推荐 - 大熊猫898989
  • 三指电爪有哪些挑选思路?2026年三指电爪品牌名单 - 品牌2025
  • 为什么你需要一个独立的PCK文件处理工具?3个自动化工作流解析
  • 构建全栈可解释AI框架:从数据到决策的透明化实践
  • 资阳市黄金回收白银回收铂金回收彩金回收门店优选+2026年最新黄金回收TOP5排行榜及联系方式推荐 - 盛世金银回收
  • GFF-PIELM:融合傅里叶特征与极限学习机,秒级求解高频PDE
  • 金融风控实战:基于SQL与LightGBM构建高精度反洗钱智能识别系统
  • 机器学习赋能引力波数据分析:从噪声识别到波形重建的实战解析
  • XML Notepad自动化脚本指南:批量处理XML文件的实用方法
  • 枣庄市黄金回收白银回收铂金回收彩金回收门店优选+2026年最新黄金回收TOP5排行榜及联系方式推荐 - 盛世金银回收
  • Hindsight核心概念解析:Retain、Recall、Reflect三大操作详解
  • 无Root安卓隐私检测:Frida+Camille实战指南
  • 基于强化学习的量子传感器电路优化:多目标权衡与工程实践