cocos2dx-3.x test 启动项解析

本文介绍了cocos2dx初学者如何理解和使用引擎内的test案例,特别是如何从AppDelegate.cpp开始,通过TestController层进入特定模块场景,如Camera3DTest。详细解析了AppDelegate中的启动逻辑,Controller结构体和菜单回调机制,包括std::function在创建和切换场景中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值