Cocos2d-X菜单回调引发异常
Cocos2d-X Menu Callback Throws Exception
我目前正在将我的软件从Cocos2d-X 2.2.6迁移到Cocos2d-X3.10,我很难使一些MenuItem回调正常工作。
我的代码如下:
bool MainMenuLayer::init()
{
bool result;
result = Layer::init();
mainMenu = Menu::create();
mainMenu->setPosition(0, 0);
this->addChild(mainMenu);
Sprite *equalSprite, *equalDownSprite;
MenuItemSprite *equalButton;
LabelBMFont *equalButtonLabel;
MenuItemLabel *equalButtonMenuLabel;
CCPoint equalButtonMenuLabelPosition;
CCPoint equalButtonPosition;
equalSprite = Sprite::createWithSpriteFrameName("botao_menu_igual.png");
equalDownSprite = Sprite::createWithSpriteFrameName("botao_menu_igual_down.png");
equalButton = MenuItemSprite::create(equalSprite, equalDownSprite, CC_CALLBACK_1(MainMenuLayer::buttonPressedCallback, this));
equalButton->setEnabled(gameContext->getEqualGameEnabled());
equalButton->setTag(EQUAL_BUTTON_TAG);
equalButtonPosition = Point(screenSize.width / 4, screenSize.height / 2);
equalButton->setPosition(mainMenu->convertToNodeSpace(equalButtonPosition));
mainMenu->addChild(equalButton);
equalButtonLabel = LabelBMFont::create(localization->getLocalizedString("EqualButtonLabel"), fontHelper->getStdFont().c_str());
equalButtonMenuLabel = MenuItemLabel::create(equalButtonLabel, CC_CALLBACK_1(MainMenuLayer::buttonPressedCallback, this));
equalButtonMenuLabel->setTag(EQUAL_BUTTON_TAG);
equalButtonMenuLabelPosition.x = equalButtonPosition.x;
equalButtonMenuLabelPosition.y = equalButtonPosition.y - equalButton->boundingBox().size.height / 2 - equalButtonMenuLabel->boundingBox().size.height;
equalButtonMenuLabel->setPosition(mainMenu->convertToNodeSpace(equalButtonMenuLabelPosition));
mainMenu->addChild(equalButtonMenuLabel);
这里还有头文件的一部分,我在其中定义了mainMenu对象:
using namespace cocos2d;
class MainMenuLayer : public Layer
{
private:
Size screenSize;
Menu *mainMenu;
bool init();
void buttonPressedCallback(Ref *sender);
public:
MainMenuLayer();
~MainMenuLayer();
static MainMenuLayer *create();
static CCScene *scene();
};
问题是,当我运行游戏并单击上面创建的按钮时,我在文件type_traits文件和:return (((*_STD forward<_Ty1>(_Arg1)).*_Pmf)(_STD forward<_Types2>(_Args2)...));
行中得到一个异常(见下文)。
struct _Invoker_pmf_pointer
{ // INVOKE a pointer to member function on a [smart] pointer
template<class _Decayed,
class _Ty1,
class... _Types2>
static auto _Call(_Decayed _Pmf, _Ty1&& _Arg1, _Types2&&... _Args2)
-> decltype(((*_STD forward<_Ty1>(_Arg1)).*_Pmf)(
_STD forward<_Types2>(_Args2)...))
{ // INVOKE a pointer to member function on a [smart] pointer
return (((*_STD forward<_Ty1>(_Arg1)).*_Pmf)(
_STD forward<_Types2>(_Args2)...));
}
};
我创建这个回调错误吗?其他人遇到过这种情况吗?
我发现了错误所在。问题是,我在前一个场景中注册了一个触摸监听器,但在场景结束时我没有删除它。
因此,当我在更改场景之前添加remove-touch监听器代码时,一切都很好。
void SplashScreenMenuLayer::onTouchesEnded(Touch* touch, Event* event)
{
Director::getInstance()->getEventDispatcher()->removeEventListener(touchListener);
Director::getInstance()->replaceScene(MainMenuLayer::scene());
}
相关文章:
- 架构决策:返回std::future还是提供回调
- 正在为Xtensa simcall函数编写回调函数
- 如何在C++中使用非静态成员函数作为回调函数
- FLTK:按下哪个按钮 - 将数字传递给按钮的回调 (lambda)
- 在简单示例中,Python3 + ctypes 回调会导致内存泄漏
- 用于在回调中调用解析器的设计模式
- 如何使用C++对象的成员函数作为 C 样式回调?
- Java从C++回调到C++回调
- 如何将成员函数作为回调参数传递给需要"typedef-ed"自由函数指针的函数?
- 从不同的 cpp 调用回调函数会导致bad_function_call
- pcap_handler回调仅在使用 NPCAP v0.9991 时包含空数据包
- 不带轮询的 SDL2 事件回调
- C++存储带有可变参数的回调
- Cocos2d-X菜单回调引发异常
- 用户回调时未处理的异常
- 在clCreateContext()中注册的回调中用C++抛出异常是否安全
- 为什么在win32计时器回调中引发的未处理异常未被调试器视为未处理异常
- OpenGL使用鼠标点击与鼠标光标移动的回调时出现未处理的异常
- 在处理回调函数时,通常的异常处理方式是什么?
- 来自第三方静态库的回调中出现未捕获的异常