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掉内存

 

clip_image001

第二步:加载游戏的控制菜单

在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)
{

}

 

clip_image002

下一章节开始制作TMX游戏地图,并加载到我们的新场景当中.

posted @ 2012-08-28 01:55  dekins  阅读(3733)  评论(8编辑  收藏  举报