转载自http://www.tuicool.com/articles/Vj6NfmQ


正文:

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

还记得Scene的那张图片吗?

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

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

Menu其实是一个容器,它装载着一些菜单,Menu不能作为菜单的一个按钮,

类似于: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",68)">"Impact 常规",153)">25);
  label2->setPosition(Point(visibleSize.width/*0.7));
  this->addChild(label2);
当然,前面visibleSize 这个获取屏幕大小的不要忘了哟,这里就不重复写了。

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

如果不知道自己系统有什么字体:

Windows用户,可以在 C盘Windows文件夹下Fonts文件夹中查看。

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

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

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

具体关于制作fnt可以看这个 ->http://www.jb51.cc/article/p-wsmhhnpl-op.html

代码大概是这样的:

auto label3 = Label::createWithBMFont("fonts/myfont.fnt",68)">"Hello Cocos2d-x");
  label3->setPosition(Point(visibleSize.width/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));
  addChild(label4);
  label4->setString("Cocos2d-x");
  
  // .png
  auto label4 = Label::createWithCharMap("png存放位置",每个字高度,每个字宽度,起始的ASCII 码);
  label4->setPosition(Point(visibleSize.width / "Cocos2d-x");
每个的最后一行就是要显示的内容了。

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

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

********************************************

Cocos2d-x之MenuItem的更多相关文章

  1. 移动端html5模拟长按事件的实现方法

    这篇文章主要介绍了移动端html5模拟长按事件的实现方法的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. ios – 在applicationWillEnterForeground触发时更改UIView

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  3. UILabel导致应用程序在添加到视图时崩溃(仅限Xcode 6和iOS 8)

    我已将我的项目转换为Xcode6,以便为iOS8构建.但是,特定的UILabel会导致应用程序在添加到视图层次结构时崩溃.这是我收到的唯一错误日志:我无法在项目中的任何位置找到contentInsetsFromFonts方法.此外,我甚至无法在网上任何地方找到它的参考,包括Apple的文档.我没有为这个UIViewController使用NIB,因此UI是在loadView方法中构建的:该应用程序

  4. iOS 7通知中心与标签一样

    您可以试试,也许在将模糊应用到标签之前为模糊添加一点白色.

  5. iOS safari输入插入颜色

    我在iPhone设备上有一个小的CSS问题.我的搜索输入为蓝色,当用户关注它时,插入符号几乎不可见:在所有桌面浏览器中,即使在桌面Safari上,它也具有正确的颜色(白色).知道如何修复此问题并更改iOS设备上的插入颜色吗?

  6. 如何计算iOS 7中的实际字体大小(不是边框)?

    编辑:链接的“重复”问题仅涉及计算文本矩形.我需要在标签缩放之后计算实际字体大小,而不是字符串大小.此方法现已弃用:如何在iOS7中计算UILabel的字体大小,以缩小文字大小以适应?

  7. ios – 为什么在presentmodalviewcontroller调用时,navigationItem.titleView会左对齐?

    我正在使用UILabel作为导航栏的titleView.它工作正常,除了当我呈现模态视图控制器时,titleView从导航栏的中心移动到最左边.我在3.0及以上测试过.这是相关代码:截图:知道为什么会这样吗?

  8. ios – 在XCode中的UI测试期间无法访问自定义视图

    我们必须执行一些时髦的动画,这是我们最好的布局).问题是我无法访问此视图以模拟其上的点击.我可以使用app.staticText[“输入名称…”]访问标签,但是如果我点击它.记录我点击标签的会话将产生app.staticText[“输入名称…”

  9. ios – UITableView以编程方式调用滑动操作

    我有一个UITableView,用户可以向左滑动以显示动作.这一切都按预期工作.当用户点击单元格的某个部分时,我想触发这个.如何以编程方式调用此幻灯片动作?

  10. ios – 在SpriteKit中创建按钮:Swift

    我想在SpriteKit或SKScene中创建一个按钮,将视图发送到另一个视图控制器.我尝试使用“performSeguewithidentifier”,但显然SKScene不支持此功能.如何使用SpriteKit创建一个将视图发送到另一个视图的按钮?这是我尝试用来执行此操作的代码.带有“HomeButton.prepareForSegueWithIdentifier()”的行只是一个例子.它实际

随机推荐

  1. 【cocos2d-x 3.x 学习笔记】对象内存管理

    Cocos2d-x的内存管理cocos2d-x中使用的是上面的引用计数来管理内存,但是又增加了一些自己的特色。cocos2d-x中通过Ref类来实现引用计数,所有需要实现内存自动回收的类都应该继承自Ref类。下面是Ref类的定义:在cocos2d-x中创建对象通常有两种方式:这两中方式的差异可以参见我另一篇博文“对象创建方式讨论”。在cocos2d-x中提倡使用第二种方式,为了避免误用第一种方式,一般将构造函数设为protected或private。参考资料:[1]cocos2d-x高级开发教程2.3节[

  2. 利用cocos2dx 3.2开发消灭星星六如何在cocos2dx中显示中文

    由于编码的不同,在cocos2dx中的Label控件中如果放入中文字,往往会出现乱码。为了方便使用,我把这个从文档中获取中文字的方法放在一个头文件里面Chinese.h这里的tex_vec是cocos2dx提供的一个保存文档内容的一个容器。这里给出ChineseWords,xml的格式再看看ChineseWord的实现Chinese.cpp就这样,以后在需要用到中文字的地方,就先include这个头文件然后调用ChineseWord函数,获取一串中文字符串。

  3. 利用cocos2dx 3.2开发消灭星星七关于星星的算法

    在前面,我们已经在GameLayer中利用随机数初始化了一个StarMatrix,如果还不知道怎么创建星星矩阵请回去看看而且我们也讲了整个游戏的触摸事件的派发了。

  4. cocos2dx3.x 新手打包APK注意事项!

    这个在编译的时候就可以发现了比较好弄这只是我遇到的,其他的以后遇到再补充吧。。。以前被这两个问题坑了好久

  5. 利用cocos2dx 3.2开发消灭星星八游戏的结束判断与数据控制

    如果你看完之前的,那么你基本已经拥有一个消灭星星游戏的雏形。开始把剩下的两两互不相连的星星消去。那么如何判断是GameOver还是进入下一关呢。。其实游戏数据贯穿整个游戏,包括星星消除的时候要加到获得分数上,消去剩下两两不相连的星星的时候的加分政策等,因此如果前面没有做这一块的,最好回去搞一搞。

  6. 利用cocos2dx 3.2开发消灭星星九为游戏添加一些特效

    needClear是一个flag,当游戏判断不能再继续后,这个flag变为true,开始消除剩下的星星clearSumTime是一个累加器ONE_CLEAR_TIME就是每颗星星消除的时间2.连击加分信息一般消除一次星星都会有连击信息和加多少分的信息。其实这些combo标签就是一张图片,也是通过控制其属性或者runAction来实现。源码ComboEffect.hComboEffect.cpp4.消除星星粒子效果消除星星时,为了实现星星爆裂散落的效果,使用了cocos2d提供的粒子特效引擎对于粒子特效不了

  7. 02 Cocos2D-x引擎win7环境搭建及创建项目

    官网有搭建的文章,直接转载记录。环境搭建:本文介绍如何搭建Cocos2d-x3.2版本的开发环境。项目创建:一、通过命令创建项目前面搭建好环境后,怎样创建自己的Cocos2d-x项目呢?先来看看Cocos2d-x3.2的目录吧这就是Cocos2d-x3.2的目录。输入cocosnew项目名–p包名–lcpp–d路径回车就创建成功了例如:成功后,找到这个项目打开proj.win32目录下的Hello.slnF5成功了。

  8. 利用cocos2dx 3.2开发消灭星星十为游戏添加音效项目源码分享

    一个游戏,声音也是非常的重要,其实cocos2dx里面的简单音效引擎的使用是非常简单的。我这里只不过是用一个类对所有的音效进行管理罢了。Audio.hAudio.cpp好了,本系列教程到此结束,第一次写教程如有不对请见谅或指教,谢谢大家。最后附上整个项目的源代码点击打开链接

  9. 03 Helloworld

    程序都有一个入口点,在C++就是main函数了,打开main.cpp,代码如下:123456789101112131415161718#include"main.h"#include"AppDelegate.h"#include"cocos2d.h"USING_NS_CC;intAPIENTRY_tWinMain{UNREFERENCED_ParaMETER;UNREFERENCED_ParaMETER;//createtheapplicationinstanceAppDelegateapp;return

  10. MenuItemImage*图标菜单创建注意事项

    学习cocos2dx,看的是cocos2d-x3.x手游开发实例详解,这本书错误一大把,本着探索求知勇于发现错误改正错误的精神,我跟着书上的例子一起调试,当学习到场景切换这个小节的时候,出了个错误,卡了我好几个小时。

返回
顶部