zoukankan      html  css  js  c++  java
  • Cocos2d-x之MenuItem

    ***************************************转载请注明出处:http://blog.csdn.net/lttree********************************************


    心情:唉。这几天做一个安卓APP界面有点头痛,纠结ING,第一次做啊,有点无从下手ING。


    正文:

          上回说了Scene和Layer,这次来耍耍MenuItem,进行一下场景的切换。

    还记得Scene的那张图片吗?


    Scene一部分Layer另外一部分就是Menu了。

    Menu就是菜单嘛。一个图层一个菜单。多符合我们观点啊,这个引擎还是挺人性化di~

    Menu事实上是一个容器,它装载着一些菜单,Menu不能作为菜单的一个button,

    类似于:Menu就像一个篮子。里面能够装各种水果,但它本身不是水果。

    对于。Menu。API上也有一个类继承图:


    能够看到,事实上Menu是Layer的一个子类。

    也就是说,Menu也能够接受触屏事件,它的优先级为-128,优先级相当高!(值越小,优先级越高)

    所以。一般它的触屏时间会优于一般Layer。

    恩。接下来说 cocos2d-x的button,也就是MenuItem:


    恩,MenuItem是Node类的子类。它有三个子类,各自是:

    MenuItemLabel           字符标签菜单

    MenuItemSprite          图片菜单

    MenuItemToggle         开关菜单

    恩,再来分别说一下。


    ①.MenuItemLabel    使用文字菜单创建的菜单项

    API中解释:

                一个"label"形式的标签菜单项项目的抽象类,不论什么支持LabelProtocol协议的节点都能够加入进来。


    要注意一下。LabelProtocol有四个分支,当中第一个分支Label是cocos2d-x  3.0 新加进来的,

    在2.x的系列中,有三种文本,各自是LabelTTF。LabelBMFont和LabelAtlas。当中3.0尤其提倡使用Lable取代LabelTTF和LabelBMFont,由于Label在渲染速度上较其快。

    接下来,看看这四种:


    1.Label::createWithTTF ---- 这是须要使用ttf格式字体文件的创建方式

    来測试一下吧:

    //获取屏幕的长宽
    	Size visibleSize = Director::getInstance()->getVisibleSize();
        Point origin = Director::getInstance()->getVisibleOrigin();
    
    	TTFConfig config("fonts/HelloKitty.ttf", 50);
     
    	auto label1 = Label::createWithTTF(config, "Hello Cocos2d-x");
    	label1->setPosition(Point(visibleSize.width/2, visibleSize.height*0.8));
    	this->addChild(label1);


    TTFConfig  将字体类型导入,第一个參数表示存放位置,就是字体的ttf文件,我上网下载了一个HelloKitty版本号的  = =~(粉粉哒~)。第二个參数是大小。

    然后以下创建Label,用自己做的config来展现我们所须要输出的内容。

    接下来,两步。老样子,设置位置,然后增加到本层中。看一看我们做出来的吧~


    这个字体....果真是HelloKitty啊  O(∩_∩)O~


    2.Label::createWithSystemFont ----- 这是使用系统自带的字体进行创建。和原来2.x中的TTF类似

    调用系统自带的字体,代码是:

    auto label2=Label::createWithSystemFont("Hello Cocos2d-x","Impact 常规",25);
    	label2->setPosition(Point(visibleSize.width/2,visibleSize.height*0.7));
    	this->addChild(label2);

    当然,前面visibleSize 这个获取屏幕大小的不要忘了哟,这里就不反复写了。

    这种方法就是能够调用系统自带的字体。三个必备參数,第一个  输出内容,第二个  调用字体的名称,第三个  输出字体的大小。

    假设不知道自己系统有什么字体:

    Windows用户。能够在 C盘Windows目录下Fonts目录中查看。

    另外,如我的例子,字体名称中包括中文是没有问题的



    3.Label::createWithBMFont ----  通过静态字体文件创建文本的方式,生成fnt文件和相应的png图片

    这个就是用自己创建的字体,.fnt和.png图片,.png是各个能输出字符的图片,.fnt存的是某个字符在Png中存放的位置。

    详细关于制作fnt能够看这个 -> http://blog.csdn.net/qiurisuixiang/article/details/8984288

    代码大概是这种:

    auto label3 = Label::createWithBMFont("fonts/myfont.fnt","Hello Cocos2d-x");
    	label3->setPosition(Point(visibleSize.width/2,visibleSize.height*0.4));
    	this->addChild(label3);

    第一个參数是文件存放的位置(.fnt 和 .png),第二个參数就是要输出的内容。



    4.Label::createWithCharMap ---- 这个是和2.x中Atlas形式创建相应的。只是这样的有两种形式匹配图片中的文字,一种是直接设置每一块字体的宽高数值获取,还有一种是通过fnt文件的方式。但原理都是一样的。

    这样的创建,须要有plist文件或者plist文件中面的值ItemHeight(每个文字的高度)itemWidth(每个文字的宽度)。startCharMap(文字起始ascii码)

    一般这样的的图仅仅会用来装饰数字和字母。

    所以,这样的创建方式关键就是获得每一个文字的高度。宽度,不管存于.png还是.plist就无所谓了。

    这个例子就没有弄了。

    。。

    大概代码形式是这样子的:

    	// .plist
    	auto label4 = Label::createWithCharMap(".plist文件存放位置");
    	label4->setPosition(Point(visibleSize.width / 2, visibleSize.height*0.2));
    	addChild(label4);
    	label4->setString("Cocos2d-x");
    	
    	// .png
    	auto label4 = Label::createWithCharMap("png存放位置", 每一个字高度, 每一个字宽度,起始的ASCII 码);
    	label4->setPosition(Point(visibleSize.width / 2, visibleSize.height*0.2));
    	addChild(label4);
    	label4->setString("Cocos2d-x");

    每一个的最后一行就是要显示的内容了。


    恩,这次就到这里了,讲了下MenuItem的一些东东。


    ***************************************转载请注明出处:http://blog.csdn.net/lttree********************************************

    版权声明:本文博主原创文章。博客,未经同意不得转载。

  • 相关阅读:
    Java实现 LeetCode 382 链表随机节点
    Java实现 LeetCode 382 链表随机节点
    Java实现 LeetCode 381 O(1) 时间插入、删除和获取随机元素
    Java实现 LeetCode 381 O(1) 时间插入、删除和获取随机元素
    Java实现 LeetCode 381 O(1) 时间插入、删除和获取随机元素
    Java实现 LeetCode 380 常数时间插入、删除和获取随机元素
    Java实现 LeetCode 380 常数时间插入、删除和获取随机元素
    Linux下的iwpriv(iwlist、iwconfig)的简单应用
    OCX控件的注册卸载,以及判断是否注册
    .OCX、.dll文件注册命令Regsvr32的使用
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4844698.html
Copyright © 2011-2022 走看看