| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 游戏开发 -> [学习笔记]cocos creator 3.0,实现飞行射击游戏的激光鞭(二) -> 正文阅读 |
|
[游戏开发][学习笔记]cocos creator 3.0,实现飞行射击游戏的激光鞭(二) |
三、代码实现逻辑3.1 普通子弹? ? ? ? 此处的普通子弹的作用有两个,提供坐标给Line组件绘制激光,与敌机产生碰撞。 ? ? ? ? 普通子弹的运行较为简单,因为教程很多,不赘述了,与普通子弹不同是,需要添加一个boolean值,用于判断子弹是否已经销毁,因为如果销毁了,就不再用其坐标绘制激光。 3.2 子弹控制器? ? ? ?因为子弹的密度越高,激光会越平滑,所以需要设定一下子弹的数量上限,达到上限后的子弹自动销毁,优化一部分性能。 ? ? ? ? 初始化的子弹节点存入数组bulletNodes,子弹数量达到上限后,销毁最早发射的子弹,并把最近生成的子弹存入数组。
3.3 Line组件绘制激光? ? ? ? 有了bulletNodes后就可以每帧遍历数组内的子弹坐标绘制激光了,此时需要处理第一个问题,如下图: ????????当敌机从侧面碰撞子弹后(碰撞了橙色点的子弹),此时绿色点的子弹并未消失,Line的绘制仍会将绿色点和蓝色点连接起来,造成激光穿过敌机的现象,此时应该在update里,每帧获取子弹的碰撞状态,并通过计算仅在bulletNodes数组内保留蓝色的子弹节点。
????????然后再遍历bulletNodes,获取坐标,存入数组,用于最后给LINE组件绘制用:
????????之后还需要处理第二个问题,因为每个子弹发射有一定的时间间隔,在下一发子弹未出现前,激光的两端以第一颗和最后一颗子弹为拐点,那在最新一发子弹发出前后,LINE组件分别如下图绘制: ? ? ? ? 这样会导致激光发射位置持续反复横跳,看着很不舒服,所以此时需要设置一个固定的起始点作为Line组件的发射点。
?最后为Line组件设置拐点: ????????????this.laserLine.positions?=?this.pointVec?as?never; 就完成了。 四、效果显示优化。? ? ? ? 因为Line只是单纯的一条直线,可以通过粒子效果分别在激光头尾部挂载,实现看起来比较酷炫的效果。 ? ? ? ? 效果如下: ? ? ? ? 配置如下: ? ? ? ? ?PositionType需要设置成RELATIVE效果。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 1:00:37- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |