(4)Cocos2d-x的Helloworld项目工程架构解析

来源:互联网 发布:手机消息提醒软件 编辑:程序博客网 时间:2024/05/22 01:58
大笑国际惯例,打个小广告,新手cocos2dx游戏开发学习群:131430516,欢迎各位一起加入讨论交流,本人QQ692187014

一.基础知识:C++的类

     可能大多数写java的童鞋会很头疼,因为C++类写在两个文件里,一个是.h文件是类的声明,而.cpp文件则是类的定义。在.h头文件里声明类和类的各个方法,然后在.cpp源文件中再定义它的实现方式。个人就把他们理解成是目录和文章的关系。


二.工程架构

     (一)在文件夹中cocos2dx 的文件结构

             

           Class:Cocos2d-x的C++类文件,游戏的入口类为AppDelegate.cpp ,其余文件根据项目情况安排。

           Debug.win32:包括编译生成的OBJ文件、编译日志文件等

           Resoures:资源文件夹,放置声音、图片等文件。

           win32:win32平台的入口文件main.cpp等。

       (题外话:在这里大家可能看到了有两个入口cpp,一个是AppDelegate.cpp,另一个是main.cpp,我可以很负责的告诉大家C++所有的工程都是从main开始启动的,在cocos2d-x中,main.cpp是整个程序窗口的启动类,而AppDelegate.cpp则是Cocos2d-x项目的入口类。)

 

       (二)在VS开发工具中cocos2dx的架构

             

在2.1.3版本的工程中新建一个项目会包含以上几个文件夹,下面简单的说下这几个文件夹里分别是存放什么样的文件

    1.include文件夹:主要存放类的头文件(.h文件)

    2.resource文件夹:主要存放项目的资源文件,如声音、图片等

    3.source文件夹:主要存放类的源文件(.cpp文件)

    4.外部依赖项:编译时会用到的外部加载的类的头文件,这里存放的大部分都是cocos2d-x引擎自带的头文件(在创建的时候自动加载了,不需要手动添加)



三.项目中部分代码讲解

      1.main

    /*main.cpp*/
    // 创建应用程序实例    AppDelegate app;    CCEGLView* eglView = CCEGLView::sharedOpenGLView();    eglView->setFrameSize(480, 320);//设置程序屏幕的大小    eglView->setViewName("MyCocos2d-x");    //这句在cocos2d-x中默认项目中是没有的,用途在于设置窗口的名字,eglView是CCEGLView类的指针,指针->函数,表示调用CCEGLView类的setViewName方法。
    int ret = CCApplication::sharedApplication()->run();
     2.AppDelegate

/*AppDelegate.cpp*/     
bool AppDelegate::applicationDidFinishLaunching(){    //初始化导演类    CCDirector *pDirector = CCDirector::sharedDirector();    pDirector->setOpenGLView(CCEGLView::sharedOpenGLView());    // 设置是否显示帧数,true为显示,false为不显示    pDirector->setDisplayStats(true);    // 设置帧数。默认值是1.0/60    pDirector->setAnimationInterval(1.0 / 60);    // 创建一个场景。这是一个生成自动释放对象,pScene指向了HelloWorld场景,在屏幕中会从HelloWorld的场景开始
    CCScene *pScene = HelloWorld::scene();    // 运行    pDirector->runWithScene(pScene);    return true;}

   3.HelloWorldScene

#include "HelloWorldScene.h"  //包含HelloWorldScene.h头文件,在C++项目中,cpp要用到的类都必须在开始的时候includeusing namespace cocos2d;      //使用cocos2d的命名空间,漏了这一句的话,之后很多cocos2d中的变量都会提示你未定义或找不到对象CCScene* HelloWorld::scene()     //定义一个HelloWorld指针指向scene方法{    CCScene * scene = NULL;   //先把场景scene设为null    do     {        // 创建一个场景,场景是自动释放资源的对象        scene = CCScene::create();        CC_BREAK_IF(! scene);        // 创建HelloWorld层,并将其传给layer指针,层是自动释放资源的对象        HelloWorld *layer = HelloWorld::create();        CC_BREAK_IF(! layer);        // 将HelloWorld层加入场景scene中,在cocos2dx中使用addChild方法        scene->addChild(layer);    } while (0);    // return the scene    return scene;}// CCLayer类的init函数在创建布景层时被调用bool HelloWorld::init(){    bool bRet = false;    do     {        //////////////////////////////////////////////////////////////////////////        // super init first        //////////////////////////////////////////////////////////////////////////        CC_BREAK_IF(! CCLayer::init());        //////////////////////////////////////////////////////////////////////////        // add your codes below...        //////////////////////////////////////////////////////////////////////////        // 1. Add a menu item with "X" image, which is clicked to quit the program.        // 创建一个关闭按钮        CCMenuItemImage *pCloseItem = CCMenuItemImage::create(            "CloseNormal.png",//正常状态的图片            "CloseSelected.png",   //按下时的图片            this,            menu_selector(HelloWorld::menuCloseCallback));        CC_BREAK_IF(! pCloseItem);        // 设置按钮pCloseItem的坐标,并用导演类的shareDirector方法获得屏幕的宽,若要获得高则,CCDirector::sharedDirector()->getWinSize().height        pCloseItem->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width - 20, 20));        // 创建一个菜单类的指针,并把关闭按钮放进菜单中        CCMenu* pMenu = CCMenu::create(pCloseItem, NULL);        pMenu->setPosition(CCPointZero); //菜单的坐标为原点        CC_BREAK_IF(! pMenu);        // 将菜单加入到HelloWorld层容器中,并置于第一层中,层越大则在屏幕中越慢绘制        this->addChild(pMenu, 1);        //创建一个文字标签,“显示的字符,字体,字号”        CCLabelTTF* pLabel = CCLabelTTF::create("Hello World", "Arial", 24);        CC_BREAK_IF(! pLabel);        // 设置文字标签的坐标        CCSize size = CCDirector::sharedDirector()->getWinSize();        pLabel->setPosition(ccp(size.width / 2, size.height - 50));        // 将文字坐标加入到HelloWorld层中        this->addChild(pLabel, 1);        // 定义一个精灵用于显示HelloWorld.png图片        CCSprite* pSprite = CCSprite::create("HelloWorld.png");        CC_BREAK_IF(! pSprite);        // 设置精灵的位置,位置都是用cpp(x,y)表示的,如果设置为原点可以CCPointZero        pSprite->setPosition(ccp(size.width/2, size.height/2));        // 将精灵加入到HelloWorld层中,并处于第0层的位置,比文字标签要低层,所以先绘制,也就是说文字会在这张图片的上面.        this->addChild(pSprite, 0);        bRet = true;    } while (0);    return bRet;}
/*事件响应函数*/void HelloWorld::menuCloseCallback(CCObject* pSender){    // 按下了关闭按钮后,程序退出    CCDirector::sharedDirector()->end();}



原创粉丝点击