关于cocos creator制作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中增加按钮事件,我增加的是鼠标事件(cc.Node.EventType.MOUSE_UP),按左键时要攻击,按右键时往点击位置移动。

4.为第2步创建的节点新增一个ts脚本文件(Common.ts),里面主要的逻辑是增加移动和攻击的方法,通过设置类变量来控制(是否在移动的变量,移动方向的变量,目标位置的变量),在移动的方法中,通过判断移动方向和位置来改变上述几个类变量,并在移动中播放行走的动画,然后在生命周期函数update中,通过这几个类变量来改变当前人物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即可。

你可能感兴趣的:(关于cocos creator制作2d游戏的过程)