Cocos2d-X中的菜单

在Cocos2d-X实现显示菜单的方式比较特殊,首先需要使用CCMenu创建一个菜单,然后使用CCMenuItem创建一个菜单项,实际上程序中显示的菜单是使用CCMenu和CCMenuItemFont共同作用的结果,在Cocos2d-X中CCMenu只是一个容器,需要使用CCMenuItemFont才能实现创建菜单

程序示例:创建一个简单的菜单

程序代码:

#include "Menu.h"

CCScene* Menu::scene()
{
    CCScene* scene = CCScene::create();

    Menu* layer = Menu::create();

    scene->addChild(layer);

    return scene;
}

bool Menu::init()
{
    //初始化父类层
    CCLayer::init();

    //得到窗口的尺寸
    CCSize winSize = CCDirector::sharedDirector()->getWinSize();

    //创建一个Menu(看不到效果,Menu只是一个容器)
    CCMenu* menu = CCMenu::create();

    //添加Menu
    addChild(menu);

    //创建一个MenuItem, 默认的Item位置就在中央
    CCMenuItemFont* item = CCMenuItemFont::create("This is item");

    //将MenuItem增加到Menu上
    menu->addChild(item1);

    return true;
}

执行结果:

程序示例:创建多个菜单,并且实现菜单响应事件

在Menu.h中添加下面的代码

#ifndef __Menu_H__
#define __Menu_H__

#include "cocos2d.h"
USING_NS_CC;

class Menu : public CCLayer
{
public:
     bool init();  

    static CCScene* scene();

    void menuHandler(CCObject*);

    CREATE_FUNC(Menu);
};

#endif // __HELLOWORLD_SCENE_H__

在Menu.cpp中添加下面的代码

#include "Menu.h"

CCScene* Menu::scene()
{
    CCScene* scene = CCScene::create();

    Menu* layer = Menu::create();

    scene->addChild(layer);

    return scene;
}

bool Menu::init()
{
    //初始化父类层
    CCLayer::init();

    //得到窗口的尺寸
    CCSize winSize = CCDirector::sharedDirector()->getWinSize();

    //创建一个Menu(看不到效果,Menu只是一个容器)
    CCMenu* menu = CCMenu::create();

    //添加Menu
    addChild(menu);

    //创建一个MenuItem, 默认的Item位置就在中央
    CCMenuItemFont* item1 = CCMenuItemFont::create("This is item1");

    //将MenuItem增加到Menu上
    menu->addChild(item1);

     //创建一个MenuItem, 默认的Item位置就在中央
    CCMenuItemFont* item2 = CCMenuItemFont::create("This is item2");

    //添加MenuItem
     menu->addChild(item2);

     //设置item2的位置
     item2->setPositionY(item1->getPositionY() - 100);

    //设置响应函数:当触摸到item时调用Menu::menuHandler
    //第一个参数:响应函数所在的对象
    //第二个参数:成员函数指针
    item1->setTarget(this, menu_selector(Menu::menuHandler));
    item2->setTarget(this, menu_selector(Menu::menuHandler));

    //设置菜单项的ID
    //item1的ID为1
    //item2的ID为2
    item1->setTag(1);
    item2->setTag(2);

    return true;
}

//响应菜单事件
void Menu::menuHandler(CCObject* obj)
{
    //将obj强制转换成菜单项类型
    CCMenuItemFont* item = (CCMenuItemFont*)obj;

    //得到菜单项的ID
    int tag = item->getTag();

    //判断用户点击了那个菜单
    if(1 == tag)
    {
        MessageBox(NULL, TEXT("item1 is clicked !"), TEXT("MenuItem响应"), MB_OK);
    }
    else
    {
        MessageBox(NULL, TEXT("item2 is clicked !"), TEXT("MenuItem响应"), MB_OK);
    }
}

执行结果:

当单击“This is Item1”后:

当单击“This is Item2”后:



时间: 2025-01-01 21:04:17

Cocos2d-X中的菜单的相关文章

在Unity3d编辑器中加入菜单以及菜单项

在引用UZGUI插件时,u3d编辑器的菜单条发生了变化,新增了菜单和菜单项,于是乎自己也像尝试一下,看了EZGUI的About_EZ_GUI脚本文件后,结果大出我所料,原来SO EASY! 1 using UnityEngine; 2 using UnityEditor; 3 4 public class Example { 5 6 [MenuItem("new Menu/new/new new/new item")] 7 static void showDialog() 8 { 9

mui 中侧滑菜单

侧滑导航 mui提供了两种侧滑导航实现:webview模式和div模式,两种模式各有优劣,适用于不同的场景. webview模式 主页面和菜单内容在不同的webview中,两个页面根据内容需求分别组织DOM结构,mui对其DOM结构无特殊要求,故其有如下优点: 菜单内容是单独的webview,故可被多个页面复用: 菜单内容在单独的webview中,菜单区域的滚动不影响主界面,故可使用原生滚动,滚动更为流畅: 另一方面,webview模式也有其缺点: 不支持拖动手势(跟手拖动): 主页面.菜单不同

linux6中grub菜单加密码

linux6中grub菜单加密码 grub加密码的目的:防止他人修改grub进行内核等启动设置,以及用单用户模式启动进行破解root密码等操作.实际上此步可以在安装系统的过程中设定,安装系统之后的具体步骤如下: 先利用/sbin/grub-md5-crypt产生一个MD5密码串,命令如下: [[email protected] ~]# /sbin/grub-md5-crypt Password: Retype password: 修改grub.conf文件,命令如下: [[email prote

如何在Cocos2D游戏中实现A*寻路算法(一)

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流之用,请勿进行商业用途.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作! 该篇博客由iOS课程团队的Johann Fradj发布,他现在是一个全职开发iOS的开发者.他是Hot Apps Factory(其是App Cooker的创造者)的共同创建

通过VBA在Excel中添加菜单和菜单项按钮(Excel启动时候添加)

将以下代码保存到.xlam或.xla(Excel97-2003)文件. 在ThisWorkBook对象中,添加Workbook_Open事件,调用启动菜单过程. Private Sub Workbook_Open() Call MenuSetup(True) End Sub '----------------------------------------------- '在Excel中添加菜单和菜单项按钮(Excel启动时候添加) '------------------------------

Android 中的菜单 OptionsMenu的简单应用

OptionsMenu就是安卓手机中的菜单选项 首先 要实现对菜单的操作就要先重写OnCreateOptionsMenu(Menu menu)方法 通常有两种方法来实现对菜单中选项的添加 第一种是动态添加:直接在OnCreateOptionsMenu方法中调用add方法 public boolean onCreateOptionsMenu(Menu menu) { menu.add(1,100,1,"菜单1"); menu.add(1,101,1,"菜单2"); m

如何在VS2010的VC++ 基于对话框的MFC程序中添加菜单

方法1:亲测 成功  转载自https://social.msdn.microsoft.com/Forums/vstudio/zh-CN/48338f6b-e5d9-4c0c-8b17-05ca3ef1f761/vs2010dialog 你可以创建菜单作为一种资源,然后将它附加到对话框.打开dialog“属性”对话框,你可以看到一个Menu属性,最终我们将在这里指定一个我们自己创建的菜单ID. 具体步骤如下: •在资源视图中右键单击工程名,插入一个新的菜单.这个菜单会有一个ID(例如:IDR_M

Android中的菜单

一个菜单中包括多个菜单项(MenuItem),在一个菜单中最多只会显示两行散列的菜单项,如果菜单项超过了六个,超过的会自动隐藏,会出现更多提示用户 在android中菜单一共分为三种:选项菜单(OptionsMenu).上下文菜单(ContextMenu).和子菜单(SubMenu). 一:选项菜单 这个暂时不需要配置文件 只需在Activity中进行完成 package com.qn.menu; import android.app.Activity; import android.os.Bu

ActionBar 中导航菜单、内容提供中和下拉菜单

一.Action View Action视图是一个在ActionBar上作为Action Button 的替代品.要声明一个视图,需要使用 actionLayout 和 actionViewClass 两个属性中的任意一个来分别定义视图的布局资源和布局类. 下面介绍如何定义 Searview 组件: <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://sch