2. 引擎结构

December 9, 2012 · View on GitHub

导演 CCDirector

CCDirector 类负责引擎的初始化工作,其实更适合这个类的名字的应该是 CCScene 类,因为她才是承担了导演的工作,我们将在后面的章节中详细介绍。CCDirector 类的 Init 方法初始化引擎:

public static function Init(resourcePath:String, frameRate:int=24):void {
	CCG.resourcePath = resourcePath;
	CCG.frameRate = frameRate;
	CCG.stepTime = (1000 / frameRate);
	IsReady = true;	// 引擎已经准备好,see Scene构造函数
}

初始化的内容包括资源的存放目录、帧频和每一帧的时间,最后一步是告诉引擎已经初始化完成。在 CCScene 类的构造函数中可以看到:

if ( !CCDirector.IsReady ) {
	throw new Error("Scene::Engine must be initialized.");
}

如果引擎没初始化完成,不允许创建 CCScene 对象,就是不能创建场景对象的。

应用程序 CCApplication

CCApplication 类是游戏应该继承的对象,这个类其实跟上面的 CCDirector 对象有相似的地方,这里是预留了出来,因为大部分的功能都集成到了 CCScene 中,接下来就是要帮她减肥,把功能分离到 CCApplication 和 CCDirector 类。

场景 CCScene

这个才是引擎的真正的管家,但是她管理的东西也渐渐的多了,是时候该帮她渐渐压了,这也是接下的工作。现在我们先来看看究竟她管理着什么。首先 CCScene 代表了游戏中的场景,就是游戏的背景图,游戏中所有对象,包括,游戏的主角,NPC,宠物,特效等都是又她来管理的。

先来看看一个概念,层,场景中分了很多层,这里跟 ActionScript 3.0 的深度管理概念一样,就是说场景中的对象分别放到不同的层中进行管理。下面我们来介绍一下每一层具体是管理和显示哪些东西。

这一章的内容主要介绍引擎的结构,只会对引擎的个方面作简单的描述,也会结合一些游戏的基本知识,在引擎中是如何体现和实现的,那么能够让大家对引擎有一个最基本的认识,而且对游戏开发的常识也能有一定的了解,就是达到了本章的目的,具体各方面的内容会在接下来的每一章节中进行详细的介绍和研究。

SceneSmallMapLayer 层

这一层是最低的一层,她是显示地图的缩略图,就是当场景的原始地图还没加载完成的时候,显示一张缩略图,虽然显示得有点模糊和有格子,但是总比看到一片黑屏或者白屏强吧,虽然一开始是模糊的,但是用户会渐渐的看到场景变得清晰,因为原始图会慢慢的加载完成,而且原始图是会进行分块加载的,所以玩家会感觉到一种渐渐地一块块变清晰,这也是提供用户体验做出了一种折中的效果,现状大部分的游戏,特别是RPG类型的游戏都采用了这种方式进行加载地图。

SceneMapLayer 层

这一层是显示地图原始图的图层,上面提高了,地图是分块加载的,因为RPG类型的游戏,通常一个场景会比较大,所以地图的尺寸也会比较大,可能会有超过好几屏大,这个时候采用分块加载的效果就非常地明显,不管是对于加载的速度,还有内存的利用来说都是做到了很不错的优化。

SceneGrid 层

这一层是显示场景网格,重要是在游戏开发期间进行游戏调试使用,当地图的阻挡和遮挡的信息完成后,可以通过这一层看到哪些地方是阻挡的,哪些地方是遮挡的,一方面可以根据效果进行调整,另一方面是调试bug。

SceneAvatar 层

这一层是渲染场景的角色对象的,包括角色身体,角色装备,武器,坐骑,宠物,特效等。能够看到游戏中角色在跑动,在跳跃,看到场景中炫丽的特效,都是在这层渲染完成。

SceneHeadLayer 层

这一层是显示角色上面附加的一些东西,例如显示玩家的昵称,玩家称号,玩家特殊的图标,玩家的对话信息,还有就是玩家使出特殊法术或者是技能的时候,要显示动画文字也是在这一层渲染。

SceneInteractiveLayer 层

顾名思义,交互层,与鼠标和键盘的交互都是在这一层实现,当玩家点击另外一玩家查看信息,需要在这里接收鼠标点击事件,当玩家想点击某个怪物进行战斗,或者点击某个 NPC 进行认为对话等等需要监听在这一层发出的消息,因为这一层是场景中的最高层,它也会屏蔽掉在它下面所有层不能接受任何的事件,相当霸道的做法。

摄像机 CCCamera

摄像机,通过摄像机大家能看到的东西就是镜头里面的内容,这里摄像机没有什么不同,玩家能看到游戏的内容就是摄像机控制的,就是说玩家看到的就是摄像机的镜头内容。摄像机会跟随的主角的跑动而移动的,就像一个摄影师在拍电影一样,主角跑到哪,它就跟到哪。

渲染器 CCRender

渲染器的工作就是每时每刻(每帧)都告诉大家应该显示你们的东西了,她就像闹钟一样,一到时间她就会吵着告诉你时间到了,该做某事了,除非你把她按停了。

角色 CCCharacter

角色对象,应该是比较重要的元素了,游戏中重要的内容都是她实例,例如主角,NPC,宠物,坐骑,特效等。哇,几乎可视的全部内容都是她的实例,太帅了。但是自身是不能显示内容,她是通过 CCAvatar 和 CCAvatarPart 这两个类来显示的,可以理解为电影中的替身或者乐坛上的代唱:)。

这一章太简短了是吧,是的,这一章的目的就是让大家有一个最基本的概念,对整个引擎有什么内容,每一部分的是负责什么工作,有一个认识就够了,那么接下来的章节就是具体介绍这些重要内容的细节,让我们一起进行研究吧。

导航