cocos2dx-3.x test 启动项解析

前端之家收集整理的这篇文章主要介绍了cocos2dx-3.x test 启动项解析前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

对于cocos2dx初学者来说,引擎内带的案例test是一个很有用、很值得琢磨的东西,里面基本包含了cocos2dx的所有用法

运行后出现如下的窗口。那如何进入我们想要进入的模块场景呢?例如运行一开始则进入Camera3DTest 这个场景。


首先分析看看AppDelegate.cpp这个文件

在bool AppDelegate::applicationDidFinishLaunching()函数中有下面语句:

auto scene = Scene::create();
auto layer = new (std::nothrow) TestController();
layer->autorelease();
layer->addConsoleAutoTest();
scene->addChild(layer);
director->runWithScene(scene);

生成TestController层,添加自动释放池中,若未被其它节点引用则下一帧被释放(-1)。

添加到scene中,并运行此场景。


转到controller.cpp中,

先看看这个结构体

typedef struct _Controller{
const char *test_name;
std::function<TestScene*()> callback;
} Controller;

std::function<TestScene*()> callback,类似一个函数指针,是C++11新增的一个泛函数,类似这样

TestScene* callback()

{

do your something;

}

之后定义一个Controller g_aTestNames[],这样的结构数组,存储对应模块信息。

再看其构造函数中的一段代码

// add menu items for tests
TTFConfig ttfConfig("fonts/arial.ttf",24);
_itemMenu = Menu::create();
for (int i = 0; i < g_testCount; ++i)
{
auto label = Label::createWithTTF(ttfConfig,g_aTestNames[i].test_name);
auto menuItem = MenuItemLabel::create(label,CC_CALLBACK_1(TestController::menuCallback,this));
_itemMenu->addChild(menuItem,i + 10000);
menuItem->setPosition(VisibleRect::center().x,(VisibleRect::top().y - (i + 1) * LINE_SPACE));
}

就是定义了文本标签菜单,其回调函数CC_CALLBACK_1(TestController::menuCallback,this));

void TestController::menuCallback(Ref * sender)
{
Director::getInstance()->purgeCachedData();
auto menuItem = static_cast<MenuItem *>(sender);
int idx = menuItem->getLocalZOrder() - 10000;

auto scene = g_aTestNames[idx].callback();
if (scene)
{
scene->runThisTest();
scene->release();
}
}

其中的idx就是模块的id号,红色的那部分就是在前面介绍的std::function的函数

猜你在找的Cocos2d-x相关文章