关闭

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

标签: cocos2d-xc++菜单标签精灵
1004人阅读 评论(0) 收藏 举报
分类:

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

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

        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的锚点是中心,默认坐标是父节点的中心。)之所以如此设置,大概是为了在默认情况下,菜单项可以显示在屏幕的中心吧。否则就要跑到屏幕外面去了。

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:47517次
    • 积分:800
    • 等级:
    • 排名:千里之外
    • 原创:30篇
    • 转载:0篇
    • 译文:0篇
    • 评论:31条
    文章分类
    最新评论