CocosCreator游戏开发(五)实现技能按钮
在上一篇中,已经顺利的实现了通过摇杆控件来控制角色移动的例子
这一篇内容中,主要来实现通过摇杆来操作技能施法位置的功能
代码效果如下:
在最初的想法中,我是想将摇杆与技能施法范围以及施法位置做成一个组件的,但是在之后的开发中,发现这样其实是有点浪费的,技能的范围以及距离其实只需要一个就足够了,于是乎就调整了代码。
在实现功能的步骤上其实也是比较简单的,其实本质就是实现一个摇杆的镜像,在摇杆移动的时候,镜像进行同步就可以了。
而本次案例依然用到了原先使用的Joystick组件,对Joystick的代码进行调整修改就可以实现了。
为了防止技能按钮与移动按钮的事件相冲突,所以我复制了一份代码出来。并重新进行了命名。
同时删除了原有代码中的area部分,只留下了ring跟dot
至于代码部分的话,只需在_touchMoveEvent中添加以下代码,计算出dot在ring中的XY坐标的比例。因为在移动的时候需要根据这个比例去对技能位置与技能范围的比例进行更新
let xbi=(this.dot.position.x-this.ring.position.x)/(this.ring.width/2);
let ybi=(this.dot.position.y-this.ring.position.y)/(this.ring.height/2);
JoystickEvent.getInstance().emit(JoystickEnum.JoystickEventType.TOUCH_MOVE, event, {speedType: speedType, moveDistance: p,xbi:xbi,ybi:ybi});
之后在主场景何种增加技能范围跟技能位置两个控件并设置好大小
在主角的代码Role.js中添加技能范围和技能位置两个属性并进行绑定
skillsDot:{
default:null,
type:cc.Node,
displayName: 'skillsDot',
},
skillsRing:{
default:null,
type:cc.Node,
displayName: 'skillsRing',
},
在onload事件中,注册技能摇杆监听事件
同时添加对应事件对应的代码
onTouchStartSkills(event){
// var t=event;
this.skillsDot.active=true;
this.skillsRing.active=true;
var skillsname=event.getCurrentTarget().name;
switch (skillsname) {
case 'SkillsJoystick1':
this.skillsDot.color=new cc.Color(255, 255, 255, 255);break;
case 'SkillsJoystick2':
this.skillsDot.color=new cc.Color(255, 0, 0, 255);break;
case 'SkillsJoystick3':
this.skillsDot.color=new cc.Color(255, 255, 0, 255);break;
case 'SkillsJoystick4':
this.skillsDot.color=new cc.Color(0, 255, 0, 255);break;
}
},
onTouchMoveSkills(event,data){
let posx1=data.xbi*(this.skillsRing.width/2)+this.skillsRing.position.x;
let posy1=data.ybi*(this.skillsRing.height/2)+this.skillsRing.position.y;
this.skillsDot.setPosition(cc.v2(posx1,posy1));
},
onTouchEndSkills(){
this.skillsDot.active=false;
this.skillsRing.active=false;
},
整个执行顺序是
1.当点击按钮时,将技能范围以及施法点显示出来,同时获取点击按钮,根据点击按钮的名字判断点击了哪个按钮,然后变更按钮的颜色(后期根据属性来判断释放什么技能)
2.当移动按钮时,根据dot在ring中的位置,然后按比例计算出skillsDot在skillsRing中的位置,接下来并更新位置
3.当按钮结束时,隐藏控件,并释放技能(在下一篇中会进行技能是否命中目标的判定)
至此就实现了,通过摇杆调整施法位置的功能了。
代码的地址在:链接:https://share.weiyun.com/uL0OTP1Y 密码:iam5rs
这边只是简单的实现了功能,还是存在一些BUG的,接下来会在之后进行细节完善的。
我并不是真正的程序员,只是一名代码的搬运工。。。
CocosCreator游戏开发(五)实现技能按钮的更多相关文章
- 【Visual C++】游戏开发五十六 浅墨DirectX教程二十三 打造游戏GUI界面(一)
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/16384009 作者:毛星云 ...
- CocosCreator游戏开发---菜鸟学习之路(一)
PS(废话): 辞职后在家好久好久了,久到经济不允许了,接着就准备再次出去找工作了,然而工作哪有那么好找,特别是像我这种菜鸟.而且我还准备转行,准备去做游戏,技能等级接近于0,那工作就更难找了.既然如 ...
- 学好三角学(函数) — SWIFT和JAVASCRIPT游戏开发的必备技能 iFIERO.com
不论是使用哪种平台进行开发,三角学在游戏当中都被广泛的使用,因此,小编iFERO认为,三角学是必须得掌握的技能之一. 游戏图片由 摘自 Razeware LLC 先以Javascript为例 一.角度 ...
- CocosCreator游戏开发---菜鸟学习之路(二)SocketIO简易教程
请先参考教程司令部-SocketIO教程进行相关操作 开发完成后部分用户会出现持续输出 a userConnected的BUG 如下图所示 经过一段时间的BUG检查终于发现了问题所在.每个人碰到的情况 ...
- CocosCreator游戏开发---菜鸟学习之路(三)如何在CocosCreator中使用Pomelo
PS(废话): 这段时间都在研究网易的Pomelo框架,作为新手小白,自然遇到了不少坑爹的事情.(当然也有可能是因为自己技术不过关的原因所以导致在很多基础的问题上纠结了很久.)网上也搜索了好久,但是基 ...
- CocosCreator游戏开发(四)实现摇杆控制角色功能
时隔3年,我又开始继续写这个系列的帖子了,也不知道是会写完全系列,还是再次夭折. 废话不多.直接开始主题了 主要实现的功能点包含这些内容:通过摇杆控制角色进行八方位移动,并按照各方位播放对应移动动画 ...
- 整理了一下浅墨大神的Visual C++/DirectX 9.0c的游戏开发手记
还是非常棒的博客,只是没有一个文件夹.所以自己做了一个山寨文件夹在这里.便于随时查找. 前面31期从略. [Visual C++]游戏开发笔记三十二 浅墨DirectX提高班之中的一个 DirectX ...
- 《MFC游戏开发》笔记五 定时器和简单动画
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9332377 作者:七十一雾央 新浪微博:http:// ...
- 【Unity3D游戏开发】NGUI之多分辨率下完美分布式协同开发 (五)
NGUI多分辨率下完美分布式协同开发:不同分辨率下相对于屏幕坐标的Perfab数据不再丢失 NGUI多分辨率下完美分布式协同开发不同分辨率下相对于屏幕坐标的Perfab数据不再丢失 开发问题 原因分析 ...
随机推荐
- 树形DP 学习笔记(树形DP、树的直径、树的重心)
前言:寒假讲过树形DP,这次再复习一下. -------------- 基本的树形DP 实现形式 树形DP的主要实现形式是$dfs$.这是因为树的特殊结构决定的——只有确定了儿子,才能决定父亲.划分阶 ...
- 实验01——java模拟银行ATM系统
用java写的一个模拟银行系统,比较初级. ATM.java package cn.tedu.yinhang; import java.util.Scanner; /** * @author 赵瑞鑫 ...
- pycharm2020专业版永久激活
pycharm专业版激活 1. 下载pycharm(专业版) 注意:这里一定要去官网下载正版的专业版pycharm. pycharm官网 但是这是pycharm的最新版,目前激活教程仅适用以前的202 ...
- Python数据类型-dic,set常见操作
字典常见方法 语法:字典名[新key]=value 功能:给字典增加键值 语法:字典名[字典里存在的key]=新的value 功能:修改字典里的值 功能:删除字典的元素,通过key来进行删除, ...
- javascript作用域、预解析笔记
1.作用域 一般情况下,一段代码中所用到的名字并不总是有效可用的, 而限定这个名字(变量)的可用性的代码范围就是这个名字的作用域,可用有效的减少变量名冲突 2.js的作用域(e ...
- 论文结果图:matplotlib和seaborn实现
在论文中,可视化结果往往很重要,毕竟文字太抽象,需要图片向审稿人直观的展现出我们的结果.我也写了俩篇论文和一篇专利的申请,其中也有一些画图的程序,因此记录,防止以后忘了.由于篇幅原因,文章就不贴代码, ...
- klassVtable与klassItable
klassVtable与klassItable类用来实现Java方法的多态,也可以叫动态绑定,是指在应用执行期间通过判断接受对象的实际类型,根据实际类型调用对应的方法.C++为了实现多态,在对象中嵌入 ...
- [深度学习] Pytorch(三)—— 多/单GPU、CPU,训练保存、加载模型参数问题
[深度学习] Pytorch(三)-- 多/单GPU.CPU,训练保存.加载预测模型问题 上一篇实践学习中,遇到了在多/单个GPU.GPU与CPU的不同环境下训练保存.加载使用使用模型的问题,如果保存 ...
- C#LeetCode刷题-几何
几何篇 # 题名 刷题 通过率 难度 587 安装栅栏 21.5% 困难 892 三维形体的表面积 C#LeetCode刷题之#892-三维形体的表面积(Surface Area of 3D Sh ...
- C#LeetCode刷题之#594-最长和谐子序列(Longest Harmonious Subsequence)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3800 访问. 和谐数组是指一个数组里元素的最大值和最小值之间的差 ...