Cocos2d-x基础知识
近来要开始一项之前想了很久的计划,那么玩转cocos2d则是这个计划中的第一步,并且在接下来的一系列文章中会记录自己的学习过程,也算是一种监督吧。本文先来说一下自己对cocos2dx一些基本概念的理解,至于一些高级特性,以后边学边更新。
一 游戏框架
在coco2dx引擎中,采用树的结构来管理游戏对象。对于一个游戏来说(或者说你的一个工程),那么有且仅有一个导演Director来管理整个游戏的流程,比如场景的切换等等。它管理着多个场景Scene,而一个场景又分为不同的层Layer,每个层又有N个精灵Sprite。大致结构如下:
导演
在cocos2dx中把统筹游戏大局的类抽象为导演(Director),它是整个游戏引擎的核心,掌控着整个游戏的运作。比如场景的切换,游戏暂停开始,节点控制。因为导演只有一个,所以很自然的想到用单例模式来设计Director类。
场景
这个场景就相当于电影中的场景,比如一部电影可能需要很多个场地,不容的场景,而游戏也一样需要构建不同的场景。那么就像游戏的关卡,模块的切换就是一个个场景的切换。
它的重要应用就是配合导演实现流程控制。
层
层主要用来处理玩家响应,与抽象的场景不同,层包含的是直接在屏幕上显示的内容,通常我们需要在层中添加精灵或者其他游戏元素。主要用法就是在层中添加要素,并且编写对应的逻辑代码,组织好之后,把层按设计的顺序添加到场景中即可,使用addChild()方法,在层中添加精灵也累死。
注意,Node类是几乎所有类的父类。
精灵
其实就是一个图片对象,比如游戏中的英雄,怪物,石头等等等等。精灵呢有动作(移动,旋转,动画神马的),主要由Texure,frame和animation组成,简单过程可描述为:使用Texture2D加载图片,可以用Texture2D生成对应的SpriteFrame(精灵帧),将SpriteFrame添加到Animation生成动画数据,用Animation生成Animate(就是最终的动画动作),最后用Sprite执行这个动作。
调度器
为游戏提供定时事件和定时调用服务。cocos2d呢总共提供了三种方式的调度器:默认;自定义的;单次的。默认的需要重载update函数来实现。而自定义和单次的则需要自己实现一个函数,通过schedule或scheduleOnce函数传入函数指针来做的。
二 渲染和动画
坐标系
标准屏幕坐标系:原点屏幕左上角,x向右,y向下。
OpenGL或 Cocos2d坐标系:原点为屏幕左下角,x向右,y向上。
游戏开发中常用到两种坐标系:世界坐标系,本地坐标系。世界坐标系就是针对于你的游戏世界的坐标,是绝对坐标。而本地的,因为cocos2d中元素是通过节点层级结构组织,所以本地坐标系指的是相对于父节点的坐标。