本文仅供个人记录和复习,不用于其他用途
菜单的作用
不管是开始界面还是游戏设置界面以及等等,都需要设计菜单。菜单可不仅仅就是一张图片,我们点击了按键之后还必须有一定的反应,比如跳转到某个界面等等。
3.x版本改变
- 取消了
menu_selector
,采用新的回调函数 - 各项类的创建方法有所改变,请自行查阅源代码
CCMenu
菜单CCMenu
是一个CCLayer
,但是子节点只能够存放CCMenuItem
以及其子类。换句话说,CCMenu
是用来存放菜单按钮的。我们一般先创建CCMenuItem
,全部设置好了之后,统一加入到CCMenu
,最后将CCMenu
加入到当前图层中。
CCMenuItem
可以直接加入层中,但是没有办法响应回调事件,因为CCMenu
继承自CCLayer
,而CCMenuItem
继承自CCNode
。注意以下几点:
CCMenu
的锚点为(0, 0),默认原点坐标为屏幕中央CCMenuItem
的锚点为(0.5, 0.5),默认原点坐标为(0, 0)
由于CCMenuItem
的坐标是相对于CCMenu
而言的,因此,CCMenuItem
看起来是位于图层中心,实际上位于CCMenu
的左下角。所以为了方便,我们一般将CCMenu
的位置设置为(0, 0),让它与当前图层重合,方便调整CCMenuItem
的位置。
|
|
CCMenu
的初始化需要我们传入所有CCMenuItem
,并且以NULL
结尾来表示参数列表结束。这里的create()
使用的是可变参数列表。
部分重要方法如下:
|
|
比较有用的是调整菜单按钮的排列方式,其他的用的不多。
CCMenuItem
CCMenuItem
是菜单项的父类,一般不直接使用,因为无法显示字体之类的内容。至于功能以下几个:
- 三个按钮状态:正常、选中、禁用
- 点击按钮之后,会自动执行回调函数
- 点击按钮后会放大
菜单项可以分为三个类别:
- 文字菜单项:
CCMenuItemLabel
、CCMenuItemAtlasFont
、CCMenuItemFont
- 图片菜单项:
CCMenuItemSprite
、CCMenuItemImage
- 切换菜单项:
CCMenuItemToggle
下面我们将一一介绍。
CCMenuItemLabel
看到名字我们就可以知道,CCMenuItemLabel
可以存放文字标签:
|
|
CCMenuItemAtlasFont
这个是CCMenuItemLabel
的子类,使用CCLabelAtlas
来创建文字标签的菜单项按钮,需要提供显示的字符串内容以及.png
文件:
|
|
CCMenuItemFont
这个同样也是CCMenuItemLabel
的子类,使用CCLabelTTF
创建菜单项,可以直接设置字符串内容,无需提供字体文件:
|
|
CCMenuItemSprite
顾名思义,这是一个由精灵组成的菜单按钮,内部有三个精灵,分别为正常、选中、禁用,所以我们可以根据三种状态设置不同的图案:
|
|
CCMenuItemImage
这个继承自CCMenuItemSprite
,我们无需创建精灵便可以直接创建菜单项:
|
|
CCMenuItemToggle
此类是一个菜单项按钮对象的集合,能够包含很多的菜单项按钮状态,方便开发者进行切换:
|
|
代码实现
类的实现有些枯燥,我们来实际的创建一个菜单:
|
|
这是一个很简单的菜单,我们只加入了一个菜单项,同时也没有对回调函数编写其他的功能。不出意外的话,你可以看到屏幕中间出现fontmenu
的字样。但是呢,它的结构其实是这样的:
CCMenu
的锚点为(0, 0),坐标为层的中央。CCMenuItem
的锚点为(0.5, 0.5),坐标为(0, 0)。所以呢,我们就能看到现在的结构。不过为了方便调整菜单项的位置,我们一般将菜单的位置调整为(0, 0),让它与层重合。
|
|
我们可以调用一下子方法,就会发现CCMenu
和CCLayer
是一样大的。
|
|
我们再加入一个菜单项,会发现两个菜单项的位置重叠在了一起,这时候怎么办呢?
|
|
不用手动去调整位置,这样就可以让菜单项上下排列好。
|
|
我们还可以改变一下菜单项的上下间隔。