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

Menu类图(派生于Layer)

  1. ref <-- Node <—Layer <-- Menu

MenuItem 类图

  1. ref <--Node <--MenuItem <--MenuItemToggle
  2. <--MenuItemSprite <--MenuItemImage
  3. <--MenuItemLabel <--MenuItemFont
  4. <--MenuItemAtlasFont

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

正常、选中、不可用

  1. MenuItemLable :文本菜单
  2. MenuItemSprite :精灵菜单
  3. MenuItemImage:图片菜单
  4. MenuItemToggle:开关菜单

文本菜单(MenuItemLabel)

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

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

  1. function MainScene:createLayer()
  2. local layer = cc.Layer:create()
  3. --添加背景图片
  4. local bg = cc.Sprite:create("menu/background.png")
  5. bg:setPosition(cc.p(size.width/2,size.height/2))
  6. layer:addChild(bg)
  7.  
  8. cc.MenuItemFont:setFontName("Times New Roman")--设置文本菜单的文本字体
  9. cc.MenuItemFont:setFontSize(86) --设置文本菜单的字体大小
  10.  
  11. local item1 = cc.MenuItemFont:create("start") --创建MenuItemFont菜单项对象,它是一个一般文本菜单
  12. local function menuItem1Callback(sender) --定义MenuItemFont菜单项单击事件的回调函数
  13. cclog("Touch Start")
  14. end
  15. item1:registerScriptTapHandler(menuItem1Callback) --注册MenuItemFont菜单项单击时间,其参数就是定义的回调函数
  16.  
  17. local labelAtlas = cc.LabelAtlas:create( --定义一个Altas标签
  18. "Help","menu/tuffy_bold_italic-charmap.png",48,65,string.byte(' '))
  19. local item2 = cc.MenuItemLabel:create(labelAtlas) --通过Atlas标签创建MenuItemLabel菜单项对象
  20. local function menuItem2Callback(sender)
  21. cclog("Touch Help")
  22. end
  23. item2:registerScriptTapHandler(menuItem2Callback)
  24.  
  25. local mn = cc.Menu:create(item1 , item2 ) --创建菜单项对象,把之前创建的菜单项添加到菜单中creat函数是这些菜单项的数组
  26. mn:alignItemsVertically() --设置菜单项垂直对齐
  27. layer:addChild(mn) --把菜单对象添加到层中
  28.  
  29. return layer
  30. end

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

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

  1. cc.MenuItemSprite:create(
  2. normalSprite , --菜单项正常显示时候的精灵
  3. selectedSprite , -- 选择菜单时候的精灵
  4. disabledSprite --菜单项禁用时候的精灵,可以省略
  5. )
  1. MenuItemImage:create(
  2. normal ,
  3. selected ,
  4. disabled
  5. )
  1. local layer = cc.Layer:create()
  2. local director = cc.Director:getInstance()
  3. local bg = cc.Sprite:create("menu/background.png")
  4. bg:setPosition(cc.p(size.width/2,size.height/2))
  5. layer:addChild(bg)
  6.  
  7. --创建开始菜单的样式
  8. local startLocalNormal = cc.Sprite:create("menu/start-up.png")
  9. local startLocalSelected = cc.Sprite:create("menu/start-down.png")
  10. local startMenuItem = cc.MenuItemSprite:create(startLocalNormal , startLocalSelected)
  11. --设置位置 侦听
  12. startMenuItem:setPosition(director:convertToGL(cc.p(700,170)))
  13. local function startCallback(args)
  14. cclog("start ")
  15. end
  16. startMenuItem:registerScriptTapHandler(startCallback)
  17. -- 创建设置菜单
  18. local settingMenuItem = cc.MenuItemImage:create(
  19. "menu/setting-up.png","menu/setting-down.png")
  20. settingMenuItem:setPosition(director:convertToGL(cc.p(480,400)))
  21. local function settingCallback(args)
  22. cclog("setting")
  23. end
  24. settingMenuItem:registerScriptTapHandler(settingCallback)
  25.  
  26. --创建 帮助菜单
  27. local imageMenuItem = cc.MenuItemImage:create(
  28. "menu/help-up.png","menu/help-down.png")
  29. imageMenuItem:setPosition(director:convertToGL(cc.p(860,480)))
  30. local function imageCallback(args)
  31. cclog("help ")
  32. end
  33. imageMenuItem:registerScriptTapHandler(imageCallback)
  34.  
  35. local mn = cc.Menu:create(startMenuItem , settingMenuItem , imageMenuItem)
  36. mn:setPosition(cc.p(0,0))
  37. layer:addChild(mn)
  38. return layer

开关菜单(MenuItemToggle)

  1. local layer = cc.Layer:create()
  2. local bg = cc.Sprite:create("menu/setting-back.png")
  3. bg:setPosition(cc.p(size.width/2,size.height/2))
  4. layer:addChild(bg)
  5.  
  6. local director = cc.Director:getInstance()
  7.  
  8. local soundOnItem = cc.MenuItemImage:create(
  9. "menu/on.png","menu/on.png") --创建菜单开的图片菜单项
  10. local soundOffItem = cc.MenuItemImage:create(
  11. "menu/off.png","menu/off.png")
  12. local soundItem = cc.MenuItemToggle:create(soundOnItem,soundOffItem) --创建开关菜单项MenuIemToggle
  13. soundItem:setPosition(director:convertToGL(cc.p(818,220)))
  14. local function soundItemCallbck(args)
  15. cclog("soundItem")
  16. end
  17. soundItem:registerScriptTapHandler(soundItemCallbck)
  18.  
  19. local musicOnItem = cc.MenuItemImage:create("menu/on.png","menu/on.png")
  20. local musicOffItem = cc.MenuItemImage:create("menu/off.png","menu/off.png")
  21. local musicItem = cc.MenuItemToggle:create(musicOnItem,musicOffItem)
  22. musicItem:setPosition(director:convertToGL(cc.p(810,362)))
  23. local function musicItemCallback(args)
  24. cclog("musicItem")
  25. end
  26. musicItem:registerScriptTapHandler(musicItemCallback)
  27.  
  28. local okItem = cc.MenuItemImage:create("menu/ok-up.png","menu/ok-down.png")
  29. okItem:setPosition(director:convertToGL(cc.p(600,510)))
  30. local function okItemCallback(args)
  31. cclog("okItem")
  32. end
  33. okItem:registerScriptTapHandler(okItemCallback)
  34. --创建Menu对象,并加入layer
  35. local mn = cc.Menu:create(soundItem , musicItem , okItem)
  36. mn:setPosition(cc.p(0,0))
  37. layer:addChild(mn)
  38. 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. Golang 逐行读写之scanner.Scan

    Go语言实现逐行读的方法多种,本文只介绍Scaner的方法,也是go推荐的方法. 官方文档 例子: file, err := os.Open("filename") if err ...

  2. 在Sublime中编辑批处理并运行

    在Sublime->Tool->Build System -> New Build System 复制如下代码名保存为 CMD.sublime-build { "cmd&q ...

  3. c/c++ qsort 函数 结构体简单使用(1)

    #include <stdio.h> #include <string.h> #include <stdlib.h> typedef struct student ...

  4. js隐式转换

    JavaScript的数据类型分为六种,分别为null,undefined,boolean,string,number,object.object是引用类型,其它的五种是基本类型或者是原始类型.我们可 ...

  5. c++友元函数

    c++友元函数分两类: 一://友员全居函数 /*#include <iostream>using namespace std;class aaa{    friend void prin ...

  6. R语言学习-基础篇

    从五月10日开始自学R in action,将我的学习所得逐渐发布在博客上. chapter1.新手上路 工作空间:存储着所有用户定义的对象(向量,矩阵,函数,数据框,列表): 当前的工目录保存是R用 ...

  7. SQLServer针对排名函数ROWNUMBER()、RANK()、DENSE_RANK()、NTILE的研究!~

    相信大家在软件工程中经常会遇到对某些数据进行排名的问题,尤其是对于电子商务的HR来说“大手笔”是非常具有潜在价值的!~至于都有哪些价值这个超出本文的范畴不予进行说明,但是不得不说的是每一个精明的HR以 ...

  8. iptables四个表与五个链间的处理关系

    转载自:http://www.linuxidc.com/Linux/2012-08/67505.htm netfilter/iptables IP 信息包过滤系统是一种功能强大的工具,可用于添加.编辑 ...

  9. escape(), encodeURI()和encodeURIComponent()(转)

      escape(), encodeURI()和encodeURIComponent()是在Javascript中用于编码字符串的三个常用的方法,而他们之间的异同却困扰了很多的Javascript初学 ...

  10. jexus部署ASP.NET MVC网站

    1.新建项目,我这里新建的空项目中的MCV 2.用nuget删除这两个类库 Microsoft.CodeDom.Providers.DotNetCompilerPlatform Microsoft.N ...