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++这类高复杂性.高风险的编译型语言来 ...
随机推荐
- asp.net mvc 5 web api 关于Requested resource does not support options 问题
1.用visual studio 2015 建立一个 web api 应用程序.记住这是一个 web api 应用. 2.新建一个web api . 3.用C#访问,代码如下:[没有问题,返回正确] ...
- Webform Application、ViewState
Application(全局对象) Application对象生存期和Web应用程序生存期一样长,生存期从Web应用程序网页被访问开始,HttpApplication类对象Application被自动 ...
- Hybrid App开发者一定不要错过的框架和工具///////////z
ionicFramework 我是hybrid app的忠实粉丝和大力倡导者,从 新浪移动云开始就不断的寻找能帮助Web程序员开发出漂亮又好用的UI层框架.在历经了jqmobile.sencha to ...
- 关于DoesObjectExist
目录: 我们可以看到这个文件夹目录是存在的 文件: 然后,我们运行测试一下: 文件存在检测成功(正常) 文件夹存在,但检测失败! ??? 明明存在的,为什么检测不到……
- java中使用jxl导出Excel表格详细通用步骤
该方法一般接收两个参数,response和要导出的表格内容的list. 一般我们将数据库的数据查询出来在页面进行展示,根据用户需求,可能需要对页面数据进行导出. 此时只要将展示之前查询所得的数据放入s ...
- 关于oracle数据库中进行查询的时候出现效率特别差的一种情况
下面这段代码执行效率是极慢的(根本没执行完成过): select /*+ parallel(16) */ z.small_code,trunc(hs.CREATED_AT),sum(hs.COST_S ...
- 笔记本中的archlinux调节亮度
参考了archlinux的wiki:https://wiki.archlinux.org/index.php/Backlight 说一下情况:/sys/class/backlight/acpi_vid ...
- 补全Gemfile缺少到javascript gem
如果缺少某个gem,查看并修改Gemfile文件 第一步要先修改源 source 'https://ruby.taobao.org' 下面补全这两个gem gem 'execjs' gem 'ther ...
- Objective-C基础4
1.强指针:默认的情况下所有的指针都是强指针,关键字__strong 弱指针:__week关键字修饰的指针 2.ARC:编译器将自动在代码合适的地方插入retain.release.autorelea ...
- Windows平板优化设置
低于千元的windows平板,和iPad差异主要在于做工方面,以及Modern软件的欠缺,续航约5小时,但其可玩性和扩展性更好. 若将其视为平板附送了桌面电脑的功能,花费一定时间容易定制成适合个人使用 ...