记cocos开发的一个小游戏

296 阅读3分钟

文章编写日期:2019-06-08 18:15:15

最近有一个需求是协助游戏项目组开发一个上课中用到的小游戏,游戏内容大概就是给主角换衣服,通过2个帽子、2身衣服排列组合成4套衣服给主角穿上,特意记录一下在游戏开发中遇到的问题和大题思路

游戏开发流程

  1. 需求方提出游戏的大概思路
  2. 游戏策划根据需求设计大概的游戏布局,以及一些基本的玩法
  3. RD和美术同步开始自己的工作
  4. 美术和RD工作都完成以后,策划会在creator上把美术资源和代码绑定上
  5. 需求方check正式完成的游戏

开发之前需要了解的

  1. cocos creator的版本对应的就是cocos2d.js的版本
  2. cocos creator、cocos2d-x 引擎、OpenGL都是基于笛卡尔坐标系。在前端中没有经过特殊设置的时候,所有的left、top都是基于左上角的原点来定位的。但是在笛卡尔坐标系中都是基于左下角
  3. 所有子节点的偏移都是基于父节点,就类似于父节点设置来postion:relative、子节点设置postion: absolute一样的效果
  4. 骨骼动画一般都是基于egret DragonBones或者spine来设计,然后导出为json数据
  5. animation组件和骨骼动画使用场景不一样,animation一般用于一些比较简单比如放大缩小等

搭建简易游戏场景

根据策划内容,把大致的node节点和场景布局都创建出来

canvas: 视图最外层节点 pigDress: 当前场景最外层节点 (可能有多个场景) bg:当前场景背景图

FinalShow:游戏结束动画 drawline:画线脚本

场景布局

1、2、3、4对应4件衣服

绑定拖拽事件

绑定拖拽事件有2种方式

1: 在代码中给node节点手动绑定事件

node.on(cc.Node.EventType.TOUCH_START, self.onTouchStart);
// touch move
node.on(cc.Node.EventType.TOUCH_MOVE, self.onTouchMove);
// touch end
node.on(cc.Node.EventType.TOUCH_END, self.onTouchEnd);

2: 通过EventHandler方式

这种方式的思路大概就是当我们拖拽1这个图片的时候,首先触发一个DragEventTrigger内的touch事件,这个touch事件再通过emit的形式触发对应封装好业务逻辑的函数

碰撞

我们绑定好事件以后,下一步就是再拖拽1、2、3、4的过程中移动对应的衣服,在鼠标抬起的时候进行碰撞检测

1: touchmove中把手指的触点转换为本地坐标

 const localPos = event.target.parent.convertTouchToNodeSpace(event);
 event.target.setPosition(localPos);

2: touchend的时候需要把当前拖动衣服的本地坐标转换为世界坐标,主角的坐标也转换为世界坐标,然后才能进行碰撞检测,除非他们父节点一样才能使用本地坐标进行碰撞检测。 碰撞检测我们是通过intersects api来完成的,当然也可以通过碰撞检测组件来完成

3: 碰撞检测失败是需要把当前位置回归原位的

event.target.setPosition(cc.v2(0, 0));

播放骨骼动画

当组合成功一套以后会播放spine骨骼动画,一个spine骨骼动画上会有好多组动画,根据不同的结果播放不同的动画name即可

// run就是spine骨骼动画list中的某一个动画名字
this.spine = this.getComponent('sp.Skeleton');
this.spine.setAnimation(0, 'run', true);

总结

  1. 由于第一次做游戏cocos creater用的不太熟练,并且就给了3天的开发时间,比较紧张,代码层面还有很大的优化空间
  2. 此文只是大概介绍了一下这个游戏开发大题思路,还有很多细节涉及到业务不在此文一一展示