一、程序流程:

  1. 初始化动画管理器:sAnimationMgr->initAnimationMap();

主要工作:创建勇士走动,战斗,NPC等动画模板,以待后面程序需要。

  1. 创建游戏主界面:CCScene *pScene = GameScene::playNewGame();

主要工作:

1)   初始化GameLayer,并将其加入到场景中:

包括GameMap和Hero两个部分, GameMap类的初始化包括:加载地图,图层抗锯齿化,初始化各层对象,其中对于enemy层对象,需要记录各个怪物的位置,对于object对象,分为传送门和NPC对象两类,分别进行初始化;Hero类进行初始化,主要是创建勇士精灵,添加到图层中。

主要关系图如下:


初始化GameLayer



初始化GameMap



初始化Hero



加载地图,初始化各层对象;

对于enemy层,记录各怪物的位置;

对于Object层,分为传送门和NPC分别进行初始化。



创建勇士精灵,

设置勇士初始状态;


2)   初始化ControlLayer,并将其加入到场景中:

主要是创建关闭、四个方向的按钮。

  1. 运行场景:pDirector->runWithScene(pScene);

定时器开始更新状态;菜单开始响应各个命令,具体流程如下:


菜单接收到move信息



计算出目标位置



碰撞检测


若前方是墙壁、门、怪物,则设置勇士改变朝向即可;否则,加载动画,勇士前进



若是墙壁,或是超出地图了,则不进行任何操作;

若是怪物,则开始战斗(fight);

若是物品,则拾取物品(pickUpItem);

若是门,则开门(openDoor);

若是npc,则与npc对话(actWithNpc);

若是传送层,则进行传送(doTeleport)



若是墙壁,或是超出地图了,则不进行任何操作;

若是怪物,则开始战斗(fight);

若是物品,则拾取物品(pickUpItem);

若是门,则开门(openDoor);

若是npc,则与npc对话(actWithNpc);

若是传送层,则进行传送(doTeleport)



移动到目标位置之后,场景移动到相应位置


二、程序中的类

程序中共有11个类,其中比较底层的类有:Global、AnimationManager和ControlLayer,Global是个全局类,将各个类之间联系起来;AnimationManager为整个程序提供动画模板,在后面各个动作需要的时候可以随时调用;ControlLayer为程序提供菜单。

接下来是实体类,有Hero,Enemy,NPC,Teleport,其中,Hero继承自CCNode,Hero中记录了勇士的状态,实现了勇士移动,打斗、拾取物品、开门、与NPC交互等行为;Enemy继承自CCObject,主要记录怪物的位置、序号等;NPC继承自CCObject,主要是用于创建NPC精灵,播放NPC动画;Teleport也继承自CCObject,用于获得与传送有关的信息,创建Teleport精灵。

然后是程序中主要的三个类:GameMap、GameLayer和GameScene。其中,GameMap类主要负责游戏地图中各层的初始化,以及怪物打斗动画;GameLayer就是游戏中的层了,主要是对层进行初始化,包括了GameMap和Hero的初始化,还实现了当勇士移动时场景的移动、提示信息的显示;GameScene中实现了对场景的初始化,包括了GameLayer和ControlLayer的初始化,实现了游戏中地图的切换。

最后,就是游戏的核心:AppDelegate类,在该类中重载了Application中的applicationDidFinishLaunching,当程序载入后开始执行该函数,该函数就是程序的核心,指挥着整个程序进行三大步:初始化动画管理器、创建游戏主界面、运行场景。