cocos2d-x如何使用外部实例?

cocos2d-x How To Use External Instances?

正如标题所说,我正在尝试使用一个超出其功能的实例。

Helloworld::init()
中有一个spr精灵实例 我想在 HelloWorld::menuCallback1(Ref* sender) 中使用它 所以一旦点击菜单,实例spr就会旋转。

请帮帮我!!!

void HelloWorld::menuCallback1(Ref* sender) {
    auto item = (MenuItemFont*)sender;

    auto actionRotation = RotateBy::create(3.0, 1080);
    spr->runAction(actionRotation);
}

bool HelloWorld::init() {
    if (!Layer::init()) return false;

    Size winSize = Director::getInstance()->getWinSize();

    auto spr = Sprite::create("ch.png");
    spr->setPosition(Point(winSize.width / 2, 70));
    spr->setAnchorPoint(Point(0.5, 0));
    this->addChild(spr);

    // 메뉴(Menu)
    auto item_1 = MenuItemFont::create("MOVE UP RIGHT", CC_CALLBACK_0(HelloWorld::menuCallback1, this));
    auto menu = Menu::create(item_1, NULL);
    menu->alignItemsVertically();
    this->addChild(menu);

    return true;
}

根据文档 menuCallback 看起来像这样:

typedef std::function<void(Ref*)> ccMenuCallback;

所以它没有任何参数。

但是您还有 2 种其他方法可以实现:

1) 在.h文件中制作Sprite* spr实例,

2) 使用 item_1->setUserObject(spr) 并使用 item->getUserObject.

在 menuCallback1 函数中提取它

您还可以为 cocos2d-x 中的任何回调传递 lambda:

[&](Ref* const ref){menuCallback1(ref);}