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

cocos2d-x如何使用外部实例?,cocos2d-x,Cocos2d X,正如在标题中提到的,我正在尝试使用一个函数之外的实例 Helloworld::init()中有一个spr sprite实例 我想在HelloWorld::menuCallback1(Ref*sender)中使用它 因此,单击菜单后,实例spr将旋转 请帮帮我 void HelloWorld::menuCallback1(Ref* sender) { auto item = (MenuItemFont*)sender; auto actionRotation = RotateBy

正如在标题中提到的,我正在尝试使用一个函数之外的实例

Helloworld::init()中有一个spr sprite实例
我想在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;
typedef std::函数ccMenuCallback;
所以它没有任何参数

但你还有两种方法可以实现这一目标:

1) 在.h文件中创建Sprite*spr实例


2) 使用item_1->setUserObject(spr)并使用item->getUserObject在menuCallback1函数中提取它。

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

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