Cocos2d-x lua 游戏中的菜单(Menu)
菜单相关类包含 菜单(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)的更多相关文章
- android中的菜单Menu
Menu是一个接口, 他有2个子接口, SubMenu和ContextMenu; 前者菜单常见于按home键就会出现 ,后者是一个上下文菜单, 一般点击某个条目会在手机屏幕中出现一个类似悬浮窗口的菜单 ...
- Cocos2d-x lua 游戏中的文字和标签
游戏场景中的文字分为静态文字和动态文字,在图片中的文字为静态文字,不能通过程序访问,而且无法动态修改内容,但是表现力丰富.动态文字一般需要通过程序访问,需要动态修改内容可以通过标签(Label or ...
- 【COCOS2DX-LUA 脚本开发之一】在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途!
[COCOS2DX-LUA 脚本开发之一]在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途! 分类: [Cocos2dx Lua 脚本开发 ] 2012-04-1 ...
- android中常用菜单(menu)的基本知识
(一)选项菜单 1.简单的创建菜单: @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMe ...
- lua学习:游戏中的Lua
lua作为一种脚本语言,可以快速地开发游戏的原型.提高游戏的开发效率. 在游戏中,lua可以用来完成下面这些工作: ●编辑游戏的用户界面 ●定义.存储和管理基础游戏数据 ●管理实时游戏事件 ●创建和维 ...
- 解决android4.0系统中菜单(Menu)添加Icon无效问题
本文转载自: http://blog.csdn.net/stevenhu_223/article/details/9705173 在Android4.0系统中,创建菜单Menu,通过setIcon方法 ...
- 如何在Cocos2D游戏中实现A*寻路算法(六)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...
- 如何在Cocos2D游戏中实现A*寻路算法(一)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...
- lua脚本在游戏中的应用
为什么要在游戏中使用脚本语言? 要解释这个问题首先我们先来了解一下脚本语言的特性: 学习门槛低,快速上手 开发成本低,可维护性强 动态语言,灵活性高 相对于C/C++这类高复杂性.高风险的编译型语言来 ...
随机推荐
- 解决从jenkins打开robot framework报告会提示‘Opening Robot Framework log failed ’的问题
最新的jenkins打开jenkins robot framework报告会提示如下 Verify that you have JavaScript enabled in your browser. ...
- linux rhel7 dock6.7安装
1. 下载dock6.7 先申请license 在这个网址下载http://dock.compbio.ucsf.edu/Online_Licensing/index.htm 2. tar zxvf * ...
- 使用Struts 2防止表单重复提交
用户重复提交表单在某些场合将会造成非常严重的后果.例如,在使用信用卡进行在线支付的时候,如果服务器的响应速度太慢,用户有可能会多次点击提交按钮,而这可能导致那张信用卡上的金额被消费了多次.因此,重复提 ...
- web网站的url设计
通常再web网站设计url时是按功能模块设计url,然后再control层一个功能模块对应一个control层类,每个control类中的方法映射相应的url请求. 如果遇见另一个功能模块需要实现同样 ...
- operator->和operator->*
->和->*都是C++中定义的可重载的运算符,其中:->称为成员选择符(member selection),而->*称为成员指针选择符(pointer-to-member se ...
- 2.6 C#的标识符命名规则
C#标识符的命名规则 程序中的变量名.常量名.类名.方法名,都叫做标识符.C#有一套标识符的命名规则,如果命名时不遵守规则,就会出错.这套规则简单说有下面三条: ①标识符只能由英文字母.数字和下划线组 ...
- Qt4.8.5在ARM9上的移植
Qt4.8.5在ARM9开发板上的移植 以前移植过qtopia-embedded-2.2.0,俗称Qt/E,在早期的Qt框架中是使用X11桌面服务器系统,无法应用于嵌入式平台,为此产生了qtopia, ...
- 论文阅读(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 ...
- 添加sudo权限
进入超级用户模式.也就是输入"su -",系统会让你输入超级用户密码,输入密码后就进入了超级用户模式.(当然,你也可以直接用root用) 添加文件的写权限.也就是输入命令" ...
- 关于缺少nvToolsExt64_1.lib时的PhysX的处理
我本人之所以缺少这个文件是因为我的PhysX如果你的PhysX是从UE4源代码中提取的,那么可能会出现如下错误,提示找不到nvToolsExt64_1.lib(本机是64bit的操作系统) 那就执行u ...