菜单相关类包含 菜单(Menu)类 和 菜单项( MenuItem )类

Menu类图(派生于Layer)

ref <-- Node <—Layer <-- Menu

MenuItem 类图

ref	<--Node	<--MenuItem	<--MenuItemToggle
				<--MenuItemSprite	<--MenuItemImage
				<--MenuItemLabel	<--MenuItemFont
						<--MenuItemAtlasFont

MenuItem 有多种形式的子类,他们表现不同的效果,每个菜单有三个基本状态 :

正常、选中、不可用

MenuItemLable :文本菜单
MenuItemSprite :精灵菜单
MenuItemImage:图片菜单
MenuItemToggle:开关菜单

文本菜单(MenuItemLabel)

文本菜单是菜单项,只能显示文本,包括MenuItemLabel   ,    MenuItemFont

目前的3.9 API没有MenuItemAtlasFont,我们可以使用LabelAtlas和MenuItemLabel结合实现MenuItemAtlasFont效果

 function MainScene:createLayer()
 	local layer = cc.Layer:create()
 	--添加背景图片
 	local bg = cc.Sprite:create("menu/background.png")
 	bg:setPosition(cc.p(size.width/2,size.height/2))
 	layer:addChild(bg)

 	cc.MenuItemFont:setFontName("Times New Roman")--设置文本菜单的文本字体
 	cc.MenuItemFont:setFontSize(86) --设置文本菜单的字体大小

 	local item1 = cc.MenuItemFont:create("start") --创建MenuItemFont菜单项对象,它是一个一般文本菜单
 	local function menuItem1Callback(sender)	  --定义MenuItemFont菜单项单击事件的回调函数
 	    cclog("Touch Start")
     end
 	item1:registerScriptTapHandler(menuItem1Callback) --注册MenuItemFont菜单项单击时间,其参数就是定义的回调函数

 	local labelAtlas = cc.LabelAtlas:create(      --定义一个Altas标签
 	"Help","menu/tuffy_bold_italic-charmap.png",48,65,string.byte(' '))
 	local item2 = cc.MenuItemLabel:create(labelAtlas) --通过Atlas标签创建MenuItemLabel菜单项对象
 	local function menuItem2Callback(sender)
 	    cclog("Touch Help")
     end
 	item2:registerScriptTapHandler(menuItem2Callback)

 	local mn = cc.Menu:create(item1 , item2 )   --创建菜单项对象,把之前创建的菜单项添加到菜单中creat函数是这些菜单项的数组
 	mn:alignItemsVertically()    --设置菜单项垂直对齐
 	layer:addChild(mn)		--把菜单对象添加到层中

 	return layer
 end

精灵菜单(MenuItemSprite)和图片菜单(MenuItemImage)

由于MenuItemImage 继承于MenuItemSprite 所以图片菜单也是属于精灵菜单的

 cc.MenuItemSprite:create(
 normalSprite ,    --菜单项正常显示时候的精灵
 selectedSprite ,   -- 选择菜单时候的精灵
 disabledSprite      --菜单项禁用时候的精灵,可以省略
 )
 MenuItemImage:create(
 	normal ,
 	selected ,
 	disabled
 )
  local layer = cc.Layer:create()
 	local director = cc.Director:getInstance()
 	local bg = cc.Sprite:create("menu/background.png")
 	bg:setPosition(cc.p(size.width/2,size.height/2))
 	layer:addChild(bg)

 	--创建开始菜单的样式
 	local startLocalNormal = cc.Sprite:create("menu/start-up.png")
 	local startLocalSelected = cc.Sprite:create("menu/start-down.png")
 	local startMenuItem = cc.MenuItemSprite:create(startLocalNormal , startLocalSelected)
 	--设置位置 和 侦听
 	startMenuItem:setPosition(director:convertToGL(cc.p(700,170)))
 	local function startCallback(args)
 	    cclog("start ")
     end
 	startMenuItem:registerScriptTapHandler(startCallback)
 	 -- 创建设置菜单
 	local settingMenuItem = cc.MenuItemImage:create(
 		"menu/setting-up.png","menu/setting-down.png")
 	settingMenuItem:setPosition(director:convertToGL(cc.p(480,400)))
 	local function settingCallback(args)
 	    cclog("setting")
     end
 	settingMenuItem:registerScriptTapHandler(settingCallback)

 	--创建 帮助菜单
 	local imageMenuItem = cc.MenuItemImage:create(
 		"menu/help-up.png","menu/help-down.png")
 	imageMenuItem:setPosition(director:convertToGL(cc.p(860,480)))
 	local function imageCallback(args)
 	    cclog("help ")
     end
 	imageMenuItem:registerScriptTapHandler(imageCallback)

 	local mn = cc.Menu:create(startMenuItem , settingMenuItem , imageMenuItem)
 	mn:setPosition(cc.p(0,0))
 	layer:addChild(mn)
 	return layer

开关菜单(MenuItemToggle)

    local layer = cc.Layer:create()
    local bg = cc.Sprite:create("menu/setting-back.png")
    bg:setPosition(cc.p(size.width/2,size.height/2))
    layer:addChild(bg)

    local director = cc.Director:getInstance()

    local soundOnItem = cc.MenuItemImage:create(
    "menu/on.png","menu/on.png")			--创建菜单开的图片菜单项
    local soundOffItem = cc.MenuItemImage:create(
    "menu/off.png","menu/off.png")
    local soundItem = cc.MenuItemToggle:create(soundOnItem,soundOffItem)  --创建开关菜单项MenuIemToggle
    soundItem:setPosition(director:convertToGL(cc.p(818,220)))
    local function soundItemCallbck(args)
       cclog("soundItem")
    end
    soundItem:registerScriptTapHandler(soundItemCallbck)

    local musicOnItem = cc.MenuItemImage:create("menu/on.png","menu/on.png")
    local musicOffItem = cc.MenuItemImage:create("menu/off.png","menu/off.png")
    local musicItem = cc.MenuItemToggle:create(musicOnItem,musicOffItem)
    musicItem:setPosition(director:convertToGL(cc.p(810,362)))
    local function musicItemCallback(args)
       cclog("musicItem")
    end
    musicItem:registerScriptTapHandler(musicItemCallback)

    local okItem = cc.MenuItemImage:create("menu/ok-up.png","menu/ok-down.png")
    okItem:setPosition(director:convertToGL(cc.p(600,510)))
    local function okItemCallback(args)
        cclog("okItem")
    end
    okItem:registerScriptTapHandler(okItemCallback)
    --创建Menu对象,并加入layer中
    local mn = cc.Menu:create(soundItem , musicItem , okItem)
    mn:setPosition(cc.p(0,0))
    layer:addChild(mn)
    return layer

Cocos2d-x lua 游戏中的菜单(Menu)的更多相关文章

  1. android中的菜单Menu

    Menu是一个接口, 他有2个子接口, SubMenu和ContextMenu; 前者菜单常见于按home键就会出现 ,后者是一个上下文菜单, 一般点击某个条目会在手机屏幕中出现一个类似悬浮窗口的菜单 ...

  2. Cocos2d-x lua 游戏中的文字和标签

    游戏场景中的文字分为静态文字和动态文字,在图片中的文字为静态文字,不能通过程序访问,而且无法动态修改内容,但是表现力丰富.动态文字一般需要通过程序访问,需要动态修改内容可以通过标签(Label  or ...

  3. 【COCOS2DX-LUA 脚本开发之一】在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途!

    [COCOS2DX-LUA 脚本开发之一]在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途! 分类: [Cocos2dx Lua 脚本开发 ] 2012-04-1 ...

  4. android中常用菜单(menu)的基本知识

    (一)选项菜单 1.简单的创建菜单: @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMe ...

  5. lua学习:游戏中的Lua

    lua作为一种脚本语言,可以快速地开发游戏的原型.提高游戏的开发效率. 在游戏中,lua可以用来完成下面这些工作: ●编辑游戏的用户界面 ●定义.存储和管理基础游戏数据 ●管理实时游戏事件 ●创建和维 ...

  6. 解决android4.0系统中菜单(Menu)添加Icon无效问题

    本文转载自: http://blog.csdn.net/stevenhu_223/article/details/9705173 在Android4.0系统中,创建菜单Menu,通过setIcon方法 ...

  7. 如何在Cocos2D游戏中实现A*寻路算法(六)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...

  8. 如何在Cocos2D游戏中实现A*寻路算法(一)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...

  9. lua脚本在游戏中的应用

    为什么要在游戏中使用脚本语言? 要解释这个问题首先我们先来了解一下脚本语言的特性: 学习门槛低,快速上手 开发成本低,可维护性强 动态语言,灵活性高 相对于C/C++这类高复杂性.高风险的编译型语言来 ...

随机推荐

  1. String转json

    一.下载json 具体到http://www.json.org/上找Java-json下载,并把其放到项目源代码中,这样就可以引用其类对象了 转载地址:http://blog.csdn.net/tax ...

  2. NLog配置文件根节点

    NLog.config 配置文件信息 <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi ...

  3. Android监听返回键、Home键+再按一次返回键退出应用

    Android监听返回键需重写onKeyDown()方法 Home键keyCode==KeyEvent.KEYCODE_HOME @Override public boolean onKeyDown( ...

  4. win7,安装node失败

    win7下,下载node安装包,安装之后 打开命令行输入 node -v,仍然提示命令不可用. 解决办法: 找到环境变量: 在用户变量里修改 path: 添加系统变量 NODE_PATH: 关机重启电 ...

  5. apache2.4 windows764 python cgi

    修改conf下的httpd.conf; 1:Listen和ServerName修改为相同的端口号,如8066 2:ScriptAlias就让他留在原位置,"${SRVROOT}/cgi-bi ...

  6. C#压缩库SharpZipLib的应用

       SharpZipLib是一个开源的C#压缩解压库,应用非常广泛.就像用ADO.NET操作数据库要打开连接.执行命令.关闭连接等多个步骤一样,用SharpZipLib进行压缩和解压也需要多个步骤. ...

  7. 亲手使用Sencha Touch + phonepag开发Web APP随笔 -- 环境安装篇

    最近因为有个项目需要制作APP,考虑到需要兼容Android和IOS,所以想采用WebAPP的方式来开发.现在是从零开始学习之路,走起-   通过网上博客和论坛,开始安装了一堆软件: 1. Sench ...

  8. NSURLSessionTask使用dispatch_semaphore 完成同步机制

    在NSURLSessionTask发起网路请求时,一般是异步操作,如果需要进行同步等待的话,可采用dispatch_semaphore_t信号量基于计数器的一种多线程同步机制.但是在多个线程访问共有资 ...

  9. .NET 泛型分析

    .NET 泛型解析 一.问题背景 我们在编程的时候往往因为需要处理不同类型的数据或者对象,重复编写很多类似的代码,造成代码的冗余,代码也显得不那么优雅,泛型的出现,正好是为了解决这个问题,实现继承. ...

  10. java String 详解

    1.java语言的字符串序列是通过字符串类实现的.java提供了3个字符串类:String类.StringBuilder类和StringBuffer类.String类是不变字符串,StringBuff ...