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
补充:移动开发 , 其他 ,