- 菜单(Menu)
- 使用 Lambda 表达式
- 使用 Lambda 表达式
菜单(Menu)
菜单是什么,我们肯定都很熟悉了,在每个游戏中都会有菜单。我们使用菜单浏览游戏选项,更改游戏设置。菜单通常包含开始,退出,设置,关于等项,菜单当然也可以包含子菜单。在 Cocos2d-x 提供 Menu 对象支持菜单功能,Menu 对象是一种特殊的 Node 对象。
创建一个菜单用于添加菜单项:
auto myMenu = Menu::create();
像我们刚才提到的一个菜单,总会有一些菜单项,比如开始,退出,设置等,没有菜单项的菜单没有存在的意义。Cocos2d-x 提供了一些方法来创建菜单项,比如使用 Label 对象,或是使用一张图像。菜单项一般有正常状态和选择状态。菜单项显示时是正常状态,当你点击它时变为选择状态,同时点击菜单还会触发一个回调函数。
使用图像创建菜单:
// creating a menu with a single item// create a menu item by specifying imagesauto closeItem = MenuItemImage::create("CloseNormal.png", "CloseSelected.png",CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));auto menu = Menu::create(closeItem, NULL);this->addChild(menu, 1);
还可以使用 MenuItem 的一个 vector 创建菜单:
// creating a Menu from a Vector of itemsVector<MenuItem*> MenuItems;auto closeItem = MenuItemImage::create("CloseNormal.png", "CloseSelected.png",CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));MenuItems.pushBack(closeItem);/* repeat for as many menu items as needed */auto menu = Menu::createWithArray(MenuItems);this->addChild(menu, 1);
运行本文档的代码示例,你就能看到在 Chapter 6 有一个 Label 菜单项组成的菜单。

使用 Lambda 表达式
我们知道,当您点击菜单项时会触发一个回调函数。C++ 11 支持了 lambda 表达式,lambda 表达式是 匿名函数,所以你可以在回调方法处,使用 lambda 表达式,这样能让代码看起来更简洁,同时不会有额外的性能开销。
一个简单的 lambda 表达式:
// create a simple Hello World lambdaauto func = [] () { cout << "Hello World"; };// now call it someplace in codefunc();
使用 lambda 表达式作为菜单项的回调函数:
auto closeItem = MenuItemImage::create("CloseNormal.png", "CloseSelected.png",[&](Ref* sender){// your code here});
