cocos2d-x 3.x menu menuitem

菜单Menu是专门用来承载菜单按钮的Layer图层,图层中的子节点只能够是菜单项MenuItem或其子类。通常先创建菜单项MenuItem,然后使用一个或多个菜单项生成菜单Menu,最后把Menu加入当前Layer图层。

如果直接在层中添加MenuItem也可以正常显示,但是无法响应回调函数,因为Menu是继承至Layer,也就继承了触摸的相关事件,而MenuItem只是从Node继承而来,并不响应触摸,因此无法调用回调函数。

由于Menu的父类为Layer,所以锚点为(0,0),且无法设置锚点。Menu的默认原点坐标为屏幕正中心(winSize.width/2, winSize.height/2)。

而对于MenuItem是添加在Menu层中的,所以MenuItem的位置是相对于Menu层的偏移位置。MenuItem相对于Menu的偏移量默认为(0,0),且菜单项的锚点默认为(0.5,0.5)。

值得注意的是:Menu包含了多个子菜单项,每个子菜单项的位置都不一样,如果定义了Menu的位置,那它作为父节点会影响到所有的子菜单项的位置,所以一般我们都是吧Menu的位置设置在PointZero,然后设置MenuItem的位置(也就是相对父节点的偏移量)来定位整个菜单。

关于菜单项:

MenuItem继承自Node,所以它的子类菜单项都可以使用Node的相关操作。

MenuItem是所有菜单项的父类,建议不要直接使用该类,因为它并不包含具体显示的功能。

作为其它菜单项的父类,主要提供了一下三个功能:

(1)提供了基本按钮的状态:正常、选中、禁用。

(2)为按钮实现了基本的回调函数机制。当玩家点积按钮后,就会调用执行相应的回调函数。

(3)触碰菜单项,附有自动放大效果。

菜单项的子类可以分成三类,总共六个:

(1)文字菜单项:MenuItemLabel、MenuItemAtlasFont、MenuItemFont;

(2)图片菜单项:MenuItemSprite、MenuItemImage;

(3)切换菜单项:MenuItemToggle。

总结:
    MenuItem继承自Node类,Menu继承自Layer类。
    Menu继承触摸的相关事件,erMenuItem不能相应回调,但可以借助Menu产生回调;
例如:
    auto btnLabel=Label::create();
    btnLabel->setString(str->getCString());
    btnLabel->setSystemFontSize(30);
    auto startItem=MenuItemLabel::create(btnLabel, CC_CALLBACK_1(StartGame:: startGame, this));
    startItem->setPosition(Vec2(size.width/2,size.height*0.2));
    auto menu=Menu::create(startItem, NULL);
    menu->setPosition(Vec2(0,0));
    this->addChild(menu);

猜你喜欢

转载自blog.csdn.net/lihao161530340/article/details/80144333
今日推荐