cocos2d-x学习之旅(九): 2.2 盘古开天辟地,进入游戏世界
混沌天地,盘古不忍寂寞,打掉自己的牙齿化作一把巨斧劈开天地,创造了宇宙万物,演化出生机勃勃的大千世界,让我们来扮演盘古,创造一个崭新的游戏世界。
在游戏开发过程中,需要了解几个重要的概念:导演,场景,布景,角色和动作,既然我们扮演盘古,天地的演化就由我们来作主
1.CCDirector(盘古):盘古用一把巨斧创造了世界,组织了天地万物,那么在游戏里,他就是游戏的创世神,制定游戏的规则,让场景 ,布景和宇宙万物有序地动作起来
2.CCScene(天地):盘古用身体撑开天地,所谓天地,在游戏里就是我们常见的关卡,关卡主要由布景和角色组成。
3.CCamera(太阳):日升日落,昼夜交替,万物得以生生不息。在游戏里,不同的角度,旋转,位置变化,缩放。
4.CCLayer(山川大地): 盘古临死前,他嘴里呼出的气变成了春风和天空的云雾;肌肉变成千里沃野,供万物生
存。 在游戏里,布景就是在每个场景里的背景,就是山川,大地,天空。
5.CCSprite(众生万物):众生万物在大地上生活,栖息繁衍,不断进化,厮杀。游戏里人物行走,雄鹰翱翔,怪物横行,这些都可以由你自己创造。
6.CCAction(动作):人类诞生,捕杀猎物。在游戏里,要生存,与怪物搏斗,就得拥有各种技能,动作,这就需要CCAction支持。
第一步 :在HelloWorld的Init方法里加载游戏背景,用CCSprite加载start.jpg的资源文件作为游戏的开始背景。
//加载过场画面 CCSize size = CCDirector::sharedDirector()->getWinSize(); CCSprite* pSprite = CCSprite::create("start.jpg"); CC_BREAK_IF(! pSprite); pSprite->setPosition(ccp(size.width/2, size.height/2)); // Add the sprite to HelloWorld layer as a child layer. this->addChild(pSprite, 0);
游戏中只有一个导演,所以CCDirector使用单例模式,为什么会使用单例模式,以及它的好处,我会在后面的章节单独谈到
CCSprite初始化加载资源采用create方法,这是自cocos2d-x2.0后开始采用的,使用了autorelease自动管理内存,所以当我们使
用时不必手动release掉内存
第二步:加载游戏的控制菜单
在resoure.h中加入资源文件
static const char s_playfont[] = "fonts/bitmapFontChinese.fnt"; static const char s_start[] = "Start Game"; static const char s_exit[] = "Exit Game";
在加载完过场画面之后加载菜单
//加载游戏菜单 CCLabelBMFont* startfontstyle=CCLabelBMFont::create(s_start,s_playfont); CCMenuItemLabel* startItem=CCMenuItemLabel::create(startfontstyle,this,menu_selector(HelloWorld::menuPlayNewGame)); CCLabelBMFont* exitfontstyle=CCLabelBMFont::create(s_exit,s_playfont); CCMenuItemLabel* exitItem = CCMenuItemLabel::create(exitfontstyle,this,menu_selector(HelloWorld::menuCloseCallback)); CCMenu* startMenu=CCMenu::create(startItem,exitItem, NULL); startMenu->alignItemsVertically(); this->addChild(startMenu);
游戏的菜单item:
CCMenuItemSprite:使用图片sprite作为menu的菜单项
CCLabelAtlas:设置好字库文件,并且以ascii字符排序顺序定义好字库的初始字符,就可以使用字库创建文本Label
CCMenuItemLabel:以label方式创建的菜单项,会自动以点击放大作为菜单的操作效果来处理
CCMenuItemFont:普通的文本菜单项
CCLabelBMFont:使用字体的文本菜单项
在HelloWorld.h中加入菜单回调方法的声明
// a selector callback void menuCloseCallback(CCObject* pSender); void menuPlayNewGame(CCObject* sender);
在HelloWorld.cpp中加入菜单回调方法
void HelloWorld::menuCloseCallback(CCObject* pSender) { // "close" menu item clicked CCDirector::sharedDirector()->end(); } void HelloWorld::menuPlayNewGame(CCObject* sender) { }
下一章节开始制作TMX游戏地图,并加载到我们的新场景当中.