Laya1.8.4 UI长按选择对应位置释放技能

需求:

需要实现拖拽摇杆选择技能释放位置,释放技能。

原理:首先拆分需求,分为两部分,UI部分和场景部分,UI部分需要实现长按效果,长按后又要有拖动效果,将官方文档的示例代码改了改就实现了UI部分,如下图,实现的了长按显示摇杆按钮,并可以拖动:

然后就是场景部分,有时候是拖动圆的位置,有时候是旋转扇形矩形等指示器的方向,前一种就是以人物自身为圆心,用技能的范围长度为半径,配合着UI部分给出的弧度转换为方向坐标,再加上人物位置就是释放技能的位置,同时还要注意UI摇杆按钮有个拖拽的范围,这样转换到场景中就是指示器距离玩家的位置,如下图:

后一种就旋转指示器,这一种就是通过获取UI技能的摇杆按钮旋转的角度来旋转指示器的角度,如下图:

,上代码!

    _proto.Init = function(){this.skill2.on(Laya.Event.MOUSE_DOWN,this,this.onPreSkill2);Laya.stage.on(Laya.Event.MOUSE_UP,this,this.onRelaseSkill2);this.knob.visible = false;this.curTouchId = 0;/***手指(鼠标)是否按下****/this.isDown = false;/***摇杆的角度****/this.angle = -1;        /***摇杆的弧度****/this.radians = -1;/***是否左手遥控****/this.isleftControl = true;   //控制器中心点位置初始化this.originPiont = new Laya.Point(this.skill2.x,this.skill2.y);this.scale = 1;}_proto.onPreSkill2 = function(e){Laya.timer.once(500,this,this.onHold,[e]);}_proto.onHold = function(e){this.isHold = true;this.knob.visible = true;this.curTouchId = e.touchId;//已按下this.isDown = true;//初始化摇杆控制点位置this.knob.pos(this.skill2.x,this.skill2.y);//摇杆移动控制事件监听Laya.stage.on(Laya.Event.MOUSE_MOVE,this,this.onMove);}_proto.onRelaseSkill2 = function(e){// 鼠标放开时,如果正在hold,则播放放开的效果if (this.isHold){this.isHold = false;this.knob.visible = false;Laya.stage.off(Laya.Event.MOUSE_MOVE,this,this.onMove);//修改摇杆角度与弧度为-1(代表无角度)this.radians = this.angle = -1;}Laya.timer.clear(this, this.onHold);}_proto.onMove = function(e){//如果不是上次的点击id,返回(避免多点抬起,以第一次按下id为准)if(e.touchId != this.curTouchId)return;//将移动时的鼠标屏幕坐标转化为摇杆局部坐标var locationPos = this.globalToLocal(new Laya.Point(Laya.stage.mouseX,Laya.stage.mouseY),false);//更新摇杆控制点位置this.knob.pos(locationPos.x,locationPos.y);//更新控制点与摇杆中心点位置距离this.deltaX = locationPos.x - this.originPiont.x;this.deltaY = locationPos.y - this.originPiont.y;//console.log(this.deltaX,this.deltaY);//计算控制点在摇杆中的角度var dx = this.deltaX * this.deltaX;var dy = this.deltaY * this.deltaY;//console.log(dx,dy);this.angle = Math.atan2(this.deltaX,this.deltaY) * 180 / Math.PI; if(this.angle < 0) this.angle += 360;//对角度取整this.angle = Math.round(this.angle);//计算控制点在摇杆中的弧度this.radians = Math.PI / 180 * this.angle;//强制控制点与中心距离不超过80像素if(dx+dy >= 80*80){//控制点在半径为80像素的位置(根据弧度变化)var x = Math.floor(Math.sin(this.radians) * 80 +this.originPiont.x);var y = Math.floor(Math.cos(this.radians) * 80 + this.originPiont.y);this.knob.pos(x,y);this.scale = 1;}else{//不超过80像素取原坐标this.knob.pos(locationPos.x,locationPos.y);this.scale = (dx + dy)/(80*80);}}
//场景部分if(this.mMainUI.angle != -1){var scale = this.mMainUI.scale;var speedX = Math.sin(this.mMainUI.radians) * 3 * scale;var speedZ = Math.cos(this.mMainUI.radians) * 3 * scale;var pos = new Vector3();Vector3.add(this._owner.transform.position,new Vector3(speedX,0,speedZ),pos);this.range.transform.position = pos;}else{
//range就是那个白色的圈this.range.transform.position = this._owner.transform.position;}

参考链接:3D角色脚本控制与碰撞检测__LAYABOX技术文档

鼠标交互--Hold (layabox.com)

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

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

相关文章

k8s笔记28--快速在ubuntu上基于二进制和源码安装containerd

k8s笔记28--快速在ubuntu上基于二进制和源码安装containerd 介绍containerd 安装方法二进制文件安装源码构建安装 注意事项说明 介绍 Containerd是一个工业标准的容器运行时&#xff0c;它强调简单、健壮和可移植性。它可作为Linux和Windows的守护进程&#xff0c;能管理主机系…

线程相关sleep和wait方法

sleep()和wait()的区别 共同点&#xff1a;两者都可以暂停线程 区别&#xff1a; sleep()没有释放线程锁&#xff1b;而wait()释放了线程锁wait()通常用于线程间的交互/通信&#xff0c;而sleep通常用于暂停执行wait()调用后&#xff0c;线程不会自动苏醒&#xff0c;需要别…

[人工智能] AI为农业赋能:智能灌溉系统

前言 人工智能&#xff08;AI&#xff09;在农业方面具有广泛的应用前景&#xff0c;这主要得益于其在数据处理、预测分析和决策优化等方面的优势。 农业生产涉及到大量的数据&#xff0c;包括土壤湿度、气温、降雨量、植物生长情况等。人工智能可以利用先进的数据处理技术&…

设计模式之工厂方法模式精讲

工厂方法模式又叫虚拟构造函数&#xff08;Virtual Constructor&#xff09;模式或者多态性工厂&#xff08;Polymorphic Factory&#xff09;模式。工厂方法模式的用意是定义一个创建产品对象的工厂接口&#xff0c;将实际创建性工作推迟到子类中。 工厂模式可以分为简单工厂…

IMU参数辨识及标定

IMU参数辨识及标定 一、标定参数分析 标定的本质是参数辨识。首先明确哪些参数可辨识&#xff0c;其次弄清怎样辨识。 参数包括陀螺仪和加速度计各自的零偏、标度因数、安装误差。 IMU需要标定的参数主要是确定性误差和随机误差&#xff0c;确定性误差主要标定bias&#xff0…

spark 编程案例

综合案例 以下案例结合了spark sql、dataframe、udf、读写文件等操作 # encoding:utf8 from pyspark.sql import SparkSession from pyspark.sql import functions as F#需求1&#xff1a;各省销售额的统计 #需求2&#xff1a;T0P3销售省份中&#xff0c;有多少店铺达到过日…

2024.2.18力扣每日一题——N叉树的前序遍历

2024.2.18 题目来源我的题解方法一 深度优先遍历&#xff08;递归方式&#xff09;方法二 迭代方式&#xff08;栈实现&#xff09; 题目来源 力扣每日一题&#xff1b;题序&#xff1a;589 我的题解 方法一 深度优先遍历&#xff08;递归方式&#xff09; 与二叉树的前序遍…

C++刷题篇——04找等值元素

一、题目 二、解题思路 1、分割后放进二维数组 2、使用map&#xff0c;key为数值&#xff0c;value为其坐标 3、遍历二维数组元素&#xff0c;再在map中找该元素对应的value值&#xff08;二维数组形式&#xff09;&#xff0c;倘若value.size为1&#xff0c;那直接返回-1&…

【学习革命】主动学习:打破传统,解锁高效学习新密码

主动学习&#xff1a;探索高效学习方法&#xff0c;提升自我知识与技能 1. 主动学习的定义与重要性 主动学习是指学习者主动参与到学习过程中&#xff0c;通过探索、发现、思考、实践等手段&#xff0c;以提高自己的知识与技能。与被动学习相比&#xff0c;主动学习更强调学习…

2024阿里云服务器ECS u1实例性能测评_CPU内存_网络_存储

阿里云服务器u1是通用算力型云服务器&#xff0c;CPU采用2.5 GHz主频的Intel(R) Xeon(R) Platinum处理器&#xff0c;ECS通用算力型u1云服务器不适用于游戏和高频交易等需要极致性能的应用场景及对业务性能一致性有强诉求的应用场景(比如业务HA场景主备机需要性能一致)&#xf…

PostgreSql 01 安装,创建用户,创建数据库,创建关系

01.安装postgresql postgreSql 是在linux上 去官网找按照的方式 选择好postgreSql 的版本&#xff0c;已经Linux的发行版本 拿到命令&#xff0c;直接扔到Linux中运行即可 # 下载PGSQL的rpm包 sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpm…

如何一键展示全平台信息?Python手把手教你搭建自己的自媒体展示平台

前言 灵感源于之前写过的Github中Readme.md中可以插入自己的js图片和动态api解析模块&#xff0c;在展示方面十分的美观&#xff1a; 这方面原理可以简化为&#xff0c;在Markdown中&#xff0c;你可以使用HTML标签来添加图像&#xff0c;就像这样&#xff1a; <tr><…

低噪声、轨至轨运算放大器芯片—— D721、D722、D724,适合用于音频领域

应用领域 D721、D722、D724是我们推荐的三款低噪声、轨至轨运算放大器芯片&#xff0c;其中D721为单运放&#xff0c;D722为双运放&#xff0c;D724为四运放。适合用于音频领域、传感器等的信号放大处理&#xff0c;比如K歌宝、音响、测距、滤波器、AD转换器前级信号处理等等。…

设计模式 - Provider 模式

在某些情况下&#xff0c;我们希望为应用程序中的许多&#xff08;如果不是全部&#xff09;组件提供数据。尽管我们可以使用 props 将数据传递给组件&#xff0c;但如果应用程序中的几乎所有组件都需要访问 prop 的值&#xff0c;这可能很难做到。 我们经常遇到所谓的属性钻探…

【Kotlin】Sequence简介

1 前言 序列&#xff08;Sequence&#xff09;是 Kotlin 中为方便操作集合及其元素而定制的接口&#xff0c;是一个延迟获取数据的集合&#xff0c;只有需要元素时才会生产元素。在处理大量数据时&#xff0c;序列可以显著地提升性能。 Sequence 类似 Java 中的 Stream&#xf…

亚信安慧AntDB:激荡数据浪潮,塑造智能新纪元

亚信安慧AntDB一直秉承着“技术生态”的理念&#xff0c;不断进行技术创新和功能增强&#xff0c;以保持与先进数据库系统的竞争力。作为一款致力于提升数据库处理性能和稳定性的系统&#xff0c;AntDB在技术上始终保持敏锐的洞察力&#xff0c;不断汲取国内外先进技术的精华&a…

大模型之路2:继续趟一条小路

继续趟一条小路&#xff0c;可谓是充满了曲折&#xff0c;当然&#xff0c;必不可少的还是坑。 吐槽 看过的喷友&#xff0c;其实你看完以后&#xff0c;大概率也就是和我一起骂骂街&#xff0c;因为....我也的确没理清楚。 我也不知道做错了什么&#xff0c;就是运行不过去…

达梦数据库日志文件管理

达梦数据库日志文件管理 联机重做日志管理归档日志文件管理开启归档模式&#xff1a;SQL开启归档模式&#xff1a;dmarch.ini归档文件切换和删除 联机重做日志管理 检查联机重做日志&#xff1a; select * from v$rlog; --CUR_FILE表示正在使用的日志文件编号select * fr…

【讲解下Gitea】

&#x1f308;个人主页:程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

实验二 数据库安全性技术(8.0)

实验二 数据库安全性技术&#xff08;8.0&#xff09; 制作不易&#xff01;点个关注&#xff01;给大家带来更多的价值&#xff01; 目录 实验二 数据库安全性技术&#xff08;8.0&#xff09;**制作不易&#xff01;点个关注&#xff01;给大家带来更多的价值&#xff01;**…