本章主要介绍testBasic.h/cpp,这两个文件主要用于返回主场景界面。
//testBasic.h
#ifndef _TEST_BASIC_H_
#define _TEST_BASIC_H_
#include "cocos2d.h"
#include "VisibleRect.h"
USING_NS_CC;
using namespace std;
class TestScene : public CCScene //继承自CCScene
{
public:
TestScene(bool bPortrait = false); //构造函数
virtual void onEnter(); //重写onEnter函数
virtual void runThisTest() = 0; //重写runThisTest函数
// The CallBack for back to the main menu scene
virtual void MainMenuCallback(CCObject* pSender); //返回主菜单函数
};
typedef CCLayer* (*NEWTESTFUNC)(); //NEWTESTFUNC表示一个返回类型为CCLayer*,没有参数的函数指针
#define TESTLAYER_CREATE_FUNC(className) \ //TESTLAYER_CREATE_FUNC表示一个创建CCLayer的宏函数
static CCLayer* create##className() \ //用两个##来在宏中替换className为宏定义的参数
{ return new className(); }
#define CF(className) create##className //CF表示 createXXX;比如CF(Scene)表示:createScene
#endif
以下是testBasic.cpp文件介绍
//testBasic.cpp
#include "testBasic.h"
#include "controller.h"
TestScene::TestScene(bool bPortrait) //构造函数
{
CCScene::init(); //调用基类的初始化函数
}
void TestScene::onEnter()
{
CCScene::onEnter(); //调用基类的onEnter函数
//add the menu item for back to main menu
//#if (CC_TARGET_PLATFORM == CC_PLATFORM_MARMALADE)
// CCLabelBMFont* label = CCLabelBMFont::create("MainMenu", "fonts/arial16.fnt");
//#else
CCLabelTTF* label = CCLabelTTF::create("MainMenu", "Arial", 20);
//#endif //将label与返回函数MainMenuCallback相关联
CCMenuItemLabel* pMenuItem = CCMenuItemLabel::create(label, this, menu_selector(TestScene::MainMenuCallback));
CCMenu* pMenu =CCMenu::create(pMenuItem, NULL); ///用pMenuItem初始化CCMenu对象
pMenu->setPosition( CCPointZero ); //设置pMenu位置
pMenuItem->setPosition( ccp( VisibleRect::right().x - 50, VisibleRect::bottom().y + 25) ); //设置返回按键位置
addChild(pMenu, 1);
}
void TestScene::MainMenuCallback(CCObject* pSender) //返回主菜单函数
{
CCScene* pScene = CCScene::create(); //创建新场景
CCLayer* pLayer = new TestController(); //创建TestController层
pLayer->autorelease();
pScene->addChild(pLayer); //将新层加入到新场景
CCDirector::sharedDirector()->replaceScene(pScene); //切换场景
}