当前位置:编程学习 > wap >>

Cocos2d-x 2.0 TestCpp框架源码分析

   

         好的引擎,会提供一系列完整的功能示例,Cocos2d-x之所以能得到很多人的喜爱,其重要的原因是它提供了丰富而易学的示例。在cocos2d-2.0-x-2.0.2中这些示例被放在一个名叫TestCpp的工程中,为了更好的学习Cocos2d-x的功能示例,我们今天来学习一下这个工程的框架结构。

 

         在VS的解决方案里展开TestCpp工程,其下有43个示例目录,除此之前还有几个文件:

 

AppDelegate.h/cpp : 程序控制类AppDelegate 。

controller.h/cpp:示例场景管理类TestController,用于显示所有示例的菜单。

testBasic.h/cpp:示例场景基类TestScene,用于返回到主界面场景。

testResource.h:文件资源名称字符串定义头文件

tests.h:示例总头文件

main.h/cpp:主函数及头文件

 

          所有的示例都是写在单独的由TestScene派生场景类中,在这些场景中加入一些由CCLayer派生的示例对象来实现相应功能的展示。

 

          与HelloWorld一样,我们需要在main.cpp中创建AppDelegate实例,并设置窗口大小,启动游戏程序。


[cpp]
#include "main.h" 
#include "AppDelegate.h" 
#include "CCEGLView.h" 
USING_NS_CC; 
//WIN32程序主函数 
int APIENTRY _tWinMain(HINSTANCE hInstance, 
                       HINSTANCE hPrevInstance, 
                       LPTSTR    lpCmdLine, 
                       int       nCmdShow) 

    UNREFERENCED_PARAMETER(hPrevInstance); 
    UNREFERENCED_PARAMETER(lpCmdLine); 
    //实例化一个Cocos2d-x程序对象 
    AppDelegate app; 
    //创建OpenGL视窗并设置窗口大小 
    CCEGLView* eglView = CCEGLView::sharedOpenGLView(); 
    eglView->setFrameSize(480, 320); 
    //运行程序对象 
    return CCApplication::sharedApplication()->run(); 

 

    在AppDelegate.cpp中的boolAppDelegate::applicationDid。FinishLaunching()函数中创建场景并运行场景

[cpp] 
bool AppDelegate::applicationDidFinishLaunching() 

    // 取得当前显示设备指针并设置其OpenGL视窗 
    CCDirector *pDirector = CCDirector::sharedDirector(); 
    pDirector->setOpenGLView(CCEGLView::sharedOpenGLView()); 
    //取得当前运行硬件平台 
    TargetPlatform target = getTargetPlatform(); 
    //如果是IPAD 
    if (target == kTargetIpad) 
    { 
        //如果能启动高清屏,使用高精度资源,否则使用一般精度资源 
        if (pDirector->enableRetinaDisplay(true)) 
        { 
            CCFileUtils::sharedFileUtils()->setResourceDirectory("ipadhd"); 
        } 
        else  
        { 
            CCFileUtils::sharedFileUtils()->setResourceDirectory("ipad"); 
        } 
    } 
    //如果是Iphone 
    else if (target == kTargetIphone) 
    { 
        //如果能启动高清屏,使用高精度资源 
        if (pDirector->enableRetinaDisplay(true)) 
        { 
            CCFileUtils::sharedFileUtils()->setResourceDirectory("hd"); 
        } 
    } 
 
    // 设置FPS信息显示 
    pDirector->setDisplayStats(true); 
 
    //设置帧间隔时间 
    pDirector->setAnimationInterval(1.0 / 60); 
    //在这里创建一个场景 
    CCScene * pScene = CCScene::create(); 
    //实例化一个TestController,它是一个CCLayer。 
    CCLayer * pLayer = new TestController(); 
    //设置由内存管理器来进行自动回收,不必手动DELETE 
    pLayer->autorelease(); 
    //将它放置到场景中 
    pScene->addChild(pLayer); 
    //运行这个新创建的场景。 
    pDirector->runWithScene(pScene); 
 
    return true; 

 

    下面我们来看一下testBase.h/cpp,这里面有一个所有示例都要用到的场景基类TestScene。

[cpp] 
#ifndef _TEST_BASIC_H_ 
#define _TEST_BASIC_H_ 
//Cocos2d头文件 
#include "cocos2d.h" 
//使用Cocos2d命名空间 
USING_NS_CC; 
using namespace std; 
 
class TestScene : public CCScene 

public:  
    //构造 
    TestScene(bool bPortrait = false); 
    //场景被加载时的回调函数 
    virtual void onEnter(); 
    //自定义的虚函数,用于运行场景。 
    virtual void runThisTest() = 0; 
    //返回主界面的菜单按钮响应回调函数。 
    virtual void MainMenuCallback(CCObject* pSender); 
}; 
 
#endif 

cpp文件:


[cpp] 
#include "testBasic.h" 
#include "controller.h" 
//构造函数 
TestScene::TestScene(bool bPortrait) 

     
    CCScene::init(); 

//场景被加载时的回调函数 
void TestScene::onEnter() 

    CCScene::onEnter(); 
 
      //#if (CC_TARGET_PLATFORM == CC_PLATFORM_MARMALADE) 
//    CCLabelBMFont* label = CCLabelBMFont::create("MainMenu",  "fonts/arial16.fnt"); 
//#else 
    //创建一个文字标签,显示“MainMenu”字符串 
    CCLabelTTF* label = CCLabelTTF::create("MainMenu", "Arial", 20); 
//#endif 
    //增加一个菜单标签,设定其被按下时的回调函数,用于返回到主界面 
    CCMenuItemLabel* pMenuItem = CCMenuItemLabel::create(label, this, menu_selector(TestScene::MainMenuCallback)); 
  &n

补充:移动开发 , 其他 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,