1.3Hello World的基本分析



龙舞奉天
2014-03-26 23:11:53

[i=s] 本帖最后由 龙舞奉天 于 2014-3-26 23:33 编辑 [/i]

[align=left][color=rgb(51, 51, 51)][font=Georgia,]让我们先进入你所建立的工程的文件夹,如E:\Code_And_Engine\cocos2d-x-2.2.1\projects\HelloWorld。[/font][/color][/align][align=left][color=rgb(51, 51, 51)][font=Georgia,][attach]216[/attach][/font][/color][/align][align=left][color=rgb(51, 51, 51)][font=Georgia,]进入后,你会发现有以上的文件夹,其中Classes就是你游戏中所写类存放的文件夹,proj.win32就是在win32平台下运行所需要的文件夹,Resources为你游戏的资源文件夹。[/font][/color][/align][align=left][color=rgb(51, 51, 51)][font=Georgia,]打开你的win32工程,如图:[/font][/color][/align][align=left][color=rgb(51, 51, 51)][font=Georgia,][attach]215[/attach][/font][/color][/align]


[align=left][color=rgb(51, 51, 51)][font=Georgia,]其中,win32文件夹下main.cpp和main.h文件是在win32平台下的接口文件,它们是windows专有的,在不同的平台下,这些文件也不一样。当你打开它们时,会发现win32平台下的主函数,例如_tWinMain(……)等。如果你学习过windows编程,可以仔细研究一下该文件;如果没有学习过windows编程,那么你可以忽略。[/font][/color][/align]
[align=left][color=rgb(51, 51, 51)][font=Georgia,]而另外的文件,“AppDelegate.h”和“Appdelegate.cpp”文件是Cocos2d-x游戏的通用入口文件。Appdelegate控制着游戏的生命周期,它涵盖了游戏从启动到结束的整个过程。[/font][/color][/align][align=left][color=rgb(51, 51, 51)][font=Georgia,]
[/font][/color][/align][align=left][color=rgb(51, 51, 51)][font=Georgia,]打开“Appdelegate.cpp”,我们来逐一介绍这个类的各个方法:[/font][/color][/align]
[b][size=5][color=#ff0000]1.applicationDidFinishLaunching()方法[/color][/size][/b]bool AppDelegate::applicationDidFinishLaunching()
{
// 初始化游戏控制器CCDirector(后面会介绍)
CCDirector* pDirector = CCDirector::sharedDirector();
CCEGLView* pEGLView = CCEGLView::sharedOpenGLView();pDirector->setOpenGLView(pEGLView);
}

[b][size=5][color=#ff0000]2.applicationDidEnterBackground()方法[/color][/size][/b]
[align=left][color=rgb(51, 51, 51)][font=Georgia,]当应用程序将要进入后台时,会调用这个方法。例如,当用户把程序切换至后台时,程序调用这个方法来暂停游戏进程,关闭游戏音乐或音效。[/font][/color][/align]

[b][size=5][color=#ff0000]3.void AppDelegate::applicationWillEnterForeground() 方法[/color][/size][/b]
[align=left][color=rgb(51, 51, 51)][font=Georgia,]该方法与2一般成对出现,在应用程序被调回到前台时调用,一般在这里继续游戏进程。[/font][/color][/align][align=left][color=rgb(51, 51, 51)][font=Georgia,]除此以外,你会看见文件中还有“HelloWorldScene.cpp”和“HelloWorldScene.h”文件,它们中定义了一个HelloWorld类,该类继承自CCLayer,表明HelloWorld在代码结构上本身就是一个层,当然,它也能代表一个场景。HelloWorld类包含一个静态函数和两个实例方法,接下来让我们看一下:[/font][/color][/align]
[size=4][color=#ff0000] 1.init()方法[/color][/size]
bool HelloWorld::
{
//////////////////////////////
// 1. 对父类进行初始化
if (!CCLayer::init())
{
return false;
}
CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();
CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin();

/////////////////////////////
// 2. 创建菜单并添加层
// 装载退出按钮并设置按钮位置,一个是未点击时的图片,一个是点击后的图片
CCMenuItemImage *pCloseItem =CCMenuItemImage::create("CloseNormal.png","CloseSelected.png",this,
menu_selector(HelloWorld::menuCloseCallback));
pCloseItem->setPosition(ccp(origin.x + visibleSize.width - pCloseItem->getContentSize().width/2 ,
origin.y + pCloseItem->getContentSize().height/2));


//创建一个菜单,并装载按钮
CCMenu* pMenu = CCMenu::create(pCloseItem, NULL);
pMenu->setPosition(CCPointZero);
this->addChild(pMenu, 1);


/////////////////////////////
// 3. 一般在这里添加你的代码
// 创建一个文字为“Hello World”标签(也叫做精灵)
CCLabelTTF* pLabel = CCLabelTTF::create("Hello World", "Arial", 24);


// 为标签设定位置
pLabel->setPosition(ccp(origin.x + visibleSize.width/2,
origin.y + visibleSize.height - pLabel->getContentSize().height));


// 把标签添加到层中
this->addChild(pLabel, 1);


// 添加一个名为"HelloWorld" 的图片精灵
CCSprite* pSprite = CCSprite::create("HelloWorld.png");


// 设定精灵位置
pSprite->setPosition(ccp(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));


// 把精灵添加到层中
this->addChild(pSprite, 0);

return true;
}



[size=4][color=#ff0000]2.scene()[/color][/size]
[font=Arial]CCScene* HelloWorld::scene()
{
//首先利用CCScene::create方法创建一个空场景
CCScene *scene = CCScene::create();[/font]

[font=Arial][size=3]//然后利用HelloWorld::create方法创建一个HelloWorld层的实例[/size][/font]
[font=Arial][size=3]//其中HelloWorld::create是调用的HelloWorld类的一个回调函数
HelloWorld *layer = HelloWorld::create();[/size][/font]

[font=Arial][size=3]// 调用scene对象的addChild方法把创建的层添加到场景中[/size][/font]
[font=Arial][size=3]scene->addChild(layer);[/size][/font]

[font=Arial][size=3]return scene;
}[/size][/font]
[align=left][color=rgb(51, 51, 51)][font=Georgia,]一个简单的HelloWorld程序大致就是如此,其中关于几个类create函数的具体原理有不懂的可以查阅相关资料,毕竟这里只讲述一点基础的东西。[/font][/color][/align]

[b](ps:本来想用论坛的code排码功能,结果试了好几次都有问题,还是算了……就这样将就着看……)[/b]