加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

cocos2dx-3.x test 启动项解析

发布时间:2020-12-14 20:49:56 所属栏目:百科 来源:网络整理
导读:对于cocos2dx初学者来说,引擎内带的案例test是一个很有用、很值得琢磨的东西,里面基本包含了cocos2dx的所有用法。 运行后出现如下的窗口。那如何进入我们想要进入的模块场景呢?例如运行一开始则进入Camera3DTest 这个场景。 首先分析看看AppDelegate.cpp

对于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的函数。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读