Cocos2d-x 3.X里的坑(1)——标签菜单项MenuItemLabel和精灵菜单项MenuItemSprite回调不响应

前端之家收集整理的这篇文章主要介绍了Cocos2d-x 3.X里的坑(1)——标签菜单项MenuItemLabel和精灵菜单项MenuItemSprite回调不响应前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

打算把自己碰到的各种坑纪录下来。一则以便将来忆苦思甜(哈哈),二则也希望能帮助到那些同样在坑里摸爬滚打的朋友们。

先看一下下面的代码,它的目的是设置一个标签菜单

        auto home=Label::createWithTTF("home","fonts/arial.ttf",40);
        home->setPosition(origin.x+visibleSize.width*0.11,origin.y+bgheight*0.03);
        auto homeItem=MenuItemLabel::create(home,[=](Ref*pSender){log("response");});
        auto menu = Menu::create(homeItem,NULL);
        menu->setPosition(Vec2::ZERO);
        this->addChild(menu);

看起来是不是无懈可击呀。确实,编译和运行都没有问题。只是按下home菜单项毫无反应。为了挖出这个坑,着实花了不少功夫,刚开始还怀疑是自己的引擎版本有问题。后来经过和示例代码的反复对照,终于发现问题出在第一个setPosition上。一旦对Label直接调用setPosition,这个Label就死了(为什么会死呢?尚未搞明白,还望各位网友赐教)。所以解决方法就是改成对MenuItemLabel调用setPosition。同样的,对精灵菜单项MenuItemSprite这个问题也存在。

这里还要顺便提一下菜单的坐标系统。它有点变态,跟其他节点的坐标系统不太一样。对于一般的节点,子节点的默认锚点是中心,默认坐标(即原点)在父节点的左下角。但是,菜单项MenuItem的默认锚点是中心,默认坐标在父节点(即菜单Menu)的左下角。而菜单Menu的默认锚点是左下角,默认坐标在父节点的中心。正好反过来。(其实还可以这样认为:菜单项MenuItem的默认锚点是中心,默认坐标在菜单Menu的中心,而菜单Menu的锚点是中心,默认坐标是父节点的中心。)之所以如此设置,大概是为了在默认情况下,菜单项可以显示在屏幕的中心吧。否则就要跑到屏幕外面去了。

猜你在找的Cocos2d-x相关文章