菜单相关类包含 菜单(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. 解决从jenkins打开robot framework报告会提示‘Opening Robot Framework log failed ’的问题

    最新的jenkins打开jenkins robot framework报告会提示如下 Verify that you have JavaScript enabled in your browser.  ...

  2. linux rhel7 dock6.7安装

    1. 下载dock6.7 先申请license 在这个网址下载http://dock.compbio.ucsf.edu/Online_Licensing/index.htm 2. tar zxvf * ...

  3. 使用Struts 2防止表单重复提交

    用户重复提交表单在某些场合将会造成非常严重的后果.例如,在使用信用卡进行在线支付的时候,如果服务器的响应速度太慢,用户有可能会多次点击提交按钮,而这可能导致那张信用卡上的金额被消费了多次.因此,重复提 ...

  4. web网站的url设计

    通常再web网站设计url时是按功能模块设计url,然后再control层一个功能模块对应一个control层类,每个control类中的方法映射相应的url请求. 如果遇见另一个功能模块需要实现同样 ...

  5. operator->和operator->*

    ->和->*都是C++中定义的可重载的运算符,其中:->称为成员选择符(member selection),而->*称为成员指针选择符(pointer-to-member se ...

  6. 2.6 C#的标识符命名规则

    C#标识符的命名规则 程序中的变量名.常量名.类名.方法名,都叫做标识符.C#有一套标识符的命名规则,如果命名时不遵守规则,就会出错.这套规则简单说有下面三条: ①标识符只能由英文字母.数字和下划线组 ...

  7. Qt4.8.5在ARM9上的移植

    Qt4.8.5在ARM9开发板上的移植 以前移植过qtopia-embedded-2.2.0,俗称Qt/E,在早期的Qt框架中是使用X11桌面服务器系统,无法应用于嵌入式平台,为此产生了qtopia, ...

  8. 论文阅读(Zhuoyao Zhong——【aixiv2016】DeepText A Unified Framework for Text Proposal Generation and Text Detection in Natural Images)

    Zhuoyao Zhong--[aixiv2016]DeepText A Unified Framework for Text Proposal Generation and Text Detecti ...

  9. 添加sudo权限

    进入超级用户模式.也就是输入"su -",系统会让你输入超级用户密码,输入密码后就进入了超级用户模式.(当然,你也可以直接用root用) 添加文件的写权限.也就是输入命令" ...

  10. 关于缺少nvToolsExt64_1.lib时的PhysX的处理

    我本人之所以缺少这个文件是因为我的PhysX如果你的PhysX是从UE4源代码中提取的,那么可能会出现如下错误,提示找不到nvToolsExt64_1.lib(本机是64bit的操作系统) 那就执行u ...