对于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的函数。
总结以上是内存溢出为你收集整理的cocos2dx-3.x test 启动项解析全部内容,希望文章能够帮你解决cocos2dx-3.x test 启动项解析所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)