一、程序流程:
- 初始化动画管理器:sAnimationMgr->initAnimationMap();
主要工作:创建勇士走动,战斗,NPC等动画模板,以待后面程序需要。
- 创建游戏主界面:CCScene *pScene = GameScene::playNewGame();
主要工作:
1) 初始化GameLayer,并将其加入到场景中:
包括GameMap和Hero两个部分, GameMap类的初始化包括:加载地图,图层抗锯齿化,初始化各层对象,其中对于enemy层对象,需要记录各个怪物的位置,对于object对象,分为传送门和NPC对象两类,分别进行初始化;Hero类进行初始化,主要是创建勇士精灵,添加到图层中。
主要关系图如下:
初始化GameLayer |
初始化GameMap |
初始化Hero |
加载地图,初始化各层对象; 对于enemy层,记录各怪物的位置; 对于Object层,分为传送门和NPC分别进行初始化。 |
创建勇士精灵, 设置勇士初始状态; |
2) 初始化ControlLayer,并将其加入到场景中:
主要是创建关闭、四个方向的按钮。
- 运行场景: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,当程序载入后开始执行该函数,该函数就是程序的核心,指挥着整个程序进行三大步:初始化动画管理器、创建游戏主界面、运行场景。