CocosGUI---Menu


class CC_DLL MenuItem : public Node

class CC_DLL Menu : public Layer

Menu负责响应触摸,MenuItem负责显示菜单项

创建:

Menu* menu = Menu::create();        addChild(menu);

MenuItem* item = MenuItemImage::create("Images/b1.png", "Images/b2.png");

menu->addChild(item); //item必须依附于menu,两张图片分别表示按下前后的显示效果MenuItemImageMenuItem孙子继承类

 

响应:

由每个item自己设置自己的触摸响应:

item->setCallback([](Ref*){MessageBox("Itemclicked", "title");});

item->setCallback(CC_CALLBACK_1(类名:: MenuItemCallback,this));

回调函数void MenuItemCallback(Ref* sender),参数必须有Ref*,表示调用这个函数的item对象通过下面方式获取:MenuItem* item = (MenuItem*)sender;

几个注意:

1.      默认菜单项在中央item位置默认在(0,0)点,锚点默认是(0.5,0.5)Menu的坐标体系和普通的Layer坐标体系不一样,默认在中间

2.      MenuItem的创建方法也很多种

MenuItem* item2 = MenuItemSprite::create(Sprite::create("Images/b1.png"), Sprite::create("Images/b2.png"));//通过两个精灵创建item
MenuItemFont* item3 = MenuItemFont::create("显示内容");//用文本字符创建,其内容就是文本内容

Label* label = Label::createWithSystemFont("createByLabel", "Arial", 50);

MenuItemLabel* item4 = MenuItemLabel::create(label); //用Label创建,比上面的更加全面

还有一个更吊的ITEM

Vector<MenuItem*> subItems;

MenuItemToggle* toggle = MenuItemToggle::createWithCallback(CC_CALLBACK_1(T011101Menu::MenuItemCallback, this),

subItems); //Toggle就是一个可以变换Item的类型,即每触摸一次,更换一个新的Item出来,createWithCallback有两个参数,其一是回调(和其他类型Item的回调一样),其二是存放一堆Item的Vector(当按了这个Item之后就会从Vector中用一个替换当前Item)

3.      Item的各种属性:

item->getSelectedIndex();返回所按Item的ID;int tag =item->getTag();Tag

4.      关于位置:Menu的大小和窗口一样大,Menu不是与窗口重合,而是Menu的左下角正好位于窗口中央(整个Menu是靠近右上的),显然Item用的是Menu坐标,Item也是锚点对齐。创建Item之后会按照先后顺序自动将Item排列在屏幕中央。

关于位置调整的函数:menu->alignItemsVertically();//水平

menu->alignItemsVerticallyWithPadding(50); //水平带间隔

5.      回调函数有一个参数Ref*,参数表示回调该函数的菜单项

 

关于MenuItem的触摸控制:和普通触摸一样,也是有四大函数,触摸是在Menu中做的

onTouchBegan:判断当前选择对象的父节点以及祖父节点的可见性,如这两者判定无误,获取当前选择,同时放上第二张Item图片。

OnTouchMove:首先确定触摸。确定当前移动到的Item,如果更换了新的Item,要做出新的效果(会用到各种坐标转换)

onTouchEnded:先retain一下menu,最后会release的。主要原因是如果Item的回调是删除自己的父节点的话,保留一下以便操作。当调用item的active时其实就是调用其回调函数。

关于MenuItem的更新图片:Menu触摸只是做了1.设置selected为true。2.放入图片2 。其实新图是由帧渲染出来的。

Item也是可以设置动画效果的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值