操练起来。。。

操练起来。。。

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
上一篇Cocos2d-x 3.7之后控制组件里的onEnter()和onAdd()的用法
下一篇在Xcode中资源文件要以folder references(蓝色文件夹)而非groups(黄色文件夹)形式添加
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭