欢迎转载:http://blog.csdn.net/fylz1125/article/details/8524081
游戏逻辑其实就像拍摄一部电影,整个过程都由导演来驱动。
游戏中的一个一个关卡,一个一个场景都跟电影中类似。每一个场景都有一些特定的元素,比如林冲风雪山神庙这个场景,大环境就是一个大风雪的夜晚,一个银装素裹的破败山头,有一个破败的山神庙,当然还可以有一些其他的元素,比如火光,野狼,灯光,乌鸦连声叫、黄狗大声吼等。这就是一个特定的场景了,呵呵。然后导演大叫一声:“Action!”,然后所有的故事情节就在这里展开,主角和一干配角上场了...
以上所有的元素就组成了这么一个场景,那么在游戏里又如何组织这些元素呢。先来看看cocos2d-x的场景处理流程。
cocos2d-x中的导演执行单元就是场景CCScene。一个场景又有那么多元素,比如一个大的背景,然后又有一些小元素,比如星星,火堆,狗等,又是如何加到场景里的呢。
可以这么说,一个场景就是一个特别的容器(其实就是一个CCNode),它能容纳各类节点(通过addChild)。那么跟电影一样,镜头一出来先有一个大的环境。这个就是主背景层(CCLayer),对,就是CCLayer(怎么翻译好一点)。然后在这个主Layer里面再添加一些其他的元素,比如人物、火堆、狂奔的大狗、清唱的小鸟等。这些元素都是独立的对象(继承CCSprite),他们都有各自的属性和行为,比如人物是一个男人,他在漫无目的的行走,火堆在燃烧放出一跳一跳的火光,狗在奔跑,鸟在飞来飞去等。所有这些元素都添加到主Layer里面,然后这个主Layer又被添加都场景里面(CCScene),最后导演执行这个场景(pDirector->runWithScene(pScene)),一个画面就出来了。
来看一看代码级别的执行过程:
主循环(不知道的看我前面的文章)
- voidCCDisplayLinkDirector::mainLoop(void)
- {
- if(m_bPurgeDirecotorInNextLoop)
- m_bPurgeDirecotorInNextLoop=false;
- purgeDirector();
- }
- elseif(!m_bInvalid)
- {
- drawScene();//注意这里就是画场景了
- //releasetheobjects
- CCPoolManager::sharedPoolManager()->pop();
- }
- }
跟进drawScene()看看怎么画的