关于cocoscreator制作2d游戏的过程
注:以下只包含⽂字的制作过程,不涉及代码
1.准备⾻骼动画的素材,我在tb上购得,是spine的导出格式,导出的⽂件中包含:atals⽂件,json⽂件,⼀张png的素材图⽚。
2.创建cocos creator的项⽬,⽣成⼀个场景Scene,创建⼀个节点,在节点上⽣成⼀个⾻骼动画的组件(sp.Skeleton)。将素材放⼊cocos的资源⽂件夹下:assets/spine/xx, 此⽬录要⾃⼰创建,xx为准备制作的⾓⾊的名字,将atals⽂件(图标为⼀个恐龙骷髅头)拖到Skeleton组件的属性Skeleton Data中,此时⾻骼动画⽣成,在Animation选择⼀种动画,打开调试cocos便可看到动画。
3.为场景的Canvas创建⼀个ts脚本(FightScene.ts),在⽣命周期⽅法start中增加按钮事件,我增加的是⿏标事件
canvas动画(cc.Node.EventType.MOUSE_UP),按左键时要攻击,按右键时往点击位置移动。
4.为第2步创建的节点新增⼀个ts脚本⽂件(Common.ts),⾥⾯主要的逻辑是增加移动和攻击的⽅法,通过设置类变量来控制(是否在移动的变量,移动⽅向的变量,⽬标位置的变量),在移动的⽅法中,通过判断移动⽅向和位置来改变上述⼏个类变量,并在移动中播放⾏⾛的动画,然后在⽣命周期函数up
date中,通过这⼏个类变量来改变当前⼈物node的x,y,zIndex坐标,使⼈物移动。 攻击⽅法也是同理,在点击按钮后触发此⽅法,然后改变⼀些类变量,并触发⼈物的动画。
5.此时调试cocos,就可以看到⼈物可以通过⿏标进⾏移动和攻击了。 现在将⼈物制作为预制体,就是将cocos⾯板左上⾓⼈物的node拖到左下⾓的资源⾥即可(最好在assets⽬录下新建⼀个预制体⽬录prefab),并在⾯板右上⾓将prefab⽬录设置为Bundle,这样打包后的游戏就不包含这部分资源,减⼩游戏体积。 此时可以在场景的ts(FightScene.ts)中,通过BUNDLE的名称已经任务预制体的名称,动态加载⼈物了。
6.为⼈物加上碰撞检测的功能,在预制体的⼈物上,加上BoxCollider的组件,勾选Editing,对碰撞盒⼦进⾏编辑。当对多个⼈物的盒⼦进⾏了编辑后,通过加载资源的⽅式,在场景中创建多个⼈物,然后在Common.ts中加上onCollisionEnter(当两个盒⼦触碰时)和
onCollisionExit(当两个盒⼦离开触碰时)的函数,参数是被碰撞到的节点的盒⼦和⾃⾝的盒⼦,因为Common.ts脚本是绑定在⼈物的⾝上,所以⼈物间互相碰撞时会触发此函数。为此脚本绑定⼀个set集合,在碰撞时将被碰撞到的节点加⼊此set集合,在碰撞离开时将对⽅节点移除此set集合,在调⽤⼈物的攻击⽅法时,遍历此集合,可对⼈物进⾏减⾎的操作(每个⼈物的脚本可设置⼀个⾎量的属性,减⾎⽅法被调⽤时,开启⼈物的被攻击的动画,并将⾎量减少,⾎量减到0,调⽤⼈物的死亡⽅法)。
7.现在碰撞盒⼦只绑定在⼈物⾝上还是有问题的,因为攻击的动画是有射程距离的,⼈物的盒⼦如果短了,那么攻击距离和动画不符,如果盒⼦长了,那么多出来的部分被攻击到也会⼈物也会被减⾎。所以要在⼈物节点下再建⼀个⼦节点命名为:⼈物名字_RangeAttack,加上BoxCollider 的组件,距离设置为动画的攻击范围,然后在onCollisionEnter的函数中,通过判断被碰撞到的是否为攻击的盒⼦(我为其命名中加⼊了下划线来判断),然后根据其名字前缀来判断,是否与碰撞节点的名称⼀致,不⼀致说明是A⼈物的攻击盒⼦碰撞到了B⼈物,那么通过攻击盒⼦拿到⽗节点,将B⼈物的节点加⼊A的碰撞集合中,onCollisionExit函数同理。⾄于在攻击的函数中,如果发现被攻击的是攻击盒⼦本⾝,那么不做处理,直接return即可。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论