Cocos2d-X中实现自定义菜单处理事件

当用户点击再松开后才会响应菜单事件,而在游戏中有些游戏需要玩家点击后就处理事件,如玩坦克大战的时候,玩家是点击一下就发射子弹,并是点击松手后发射子弹,在Cocos2d-X中没有这种消息,下面就通过自定义的方式实现当用户点击后就调用处理函数

程序:当用户点击后处理消息松开手后处理结束

首先自定义一个MyMenu类用于处理点击事件

/*
	1)注册定时器函数,在定时器处理函数中,调用m_pSelectItem->active()
*/
class MyMenu : public CCMenu
{
public:
	CREATE_FUNC(MyMenu);

    //当手按下的时候
	bool ccTouchBegan(CCTouch* touch, CCEvent* ev)
	{
                bool bRet = CCMenu::ccTouchBegan(touch, ev);

                if (bRet)
		{
			// 注册定时器函数
			scheduleUpdate();

			return true;
		}

		return false;
	}

	void ccTouchEnded(CCTouch* touch, CCEvent* ev)
	{
                //定时器停止计时
		unscheduleAllSelectors();
	}

	//每次帧循环都会被调用
        //dt上一次帧循环到这次帧循环所花的时间
	void update(float dt)
	{
		if (this->m_pSelectedItem && m_eState == kCCMenuStateTrackingTouch)
		{
			this->m_pSelectedItem->activate();
		}
	}
};

在Menu.h中添加下面的代码(代码中包含了自定义的MyMenu类)

#ifndef __Menu_H__
#define __Menu_H__

#include "cocos2d.h"
USING_NS_CC;

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

    static CCScene* scene();

    //响应菜单事件
    void menuHandler(CCObject*);

    CREATE_FUNC(Menu);
};

/*
	1)注册定时器函数,在定时器处理函数中,调用m_pSelectItem->active()
*/
class MyMenu : public CCMenu
{
public:
	CREATE_FUNC(MyMenu);

    //当手按下的时候
	bool ccTouchBegan(CCTouch* touch, CCEvent* ev)
	{
                bool bRet = CCMenu::ccTouchBegan(touch, ev);

                if (bRet)
		{
			// 注册定时器函数
			scheduleUpdate();

			return true;
		}

		return false;
	}

	void ccTouchEnded(CCTouch* touch, CCEvent* ev)
	{
                //定时器停止计时
		unscheduleAllSelectors();
	}

	//每次帧循环都会被调用
        //dt上一次帧循环到这次帧循环所花的时间
	void update(float dt)
	{
		if (this->m_pSelectedItem && m_eState == kCCMenuStateTrackingTouch)
		{
			this->m_pSelectedItem->activate();
		}
	}
};

#endif // Menu

在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();

    //创建菜单项
    CCMenuItem* item = CCMenuItemFont::create("Click Me",
			this, menu_selector(Menu::menuHandler));

    //使用自定义的MyMenu创建菜单
    MyMenu* menu = MyMenu::create();

    //添加菜单
    addChild(menu);

    //添加菜单项
    menu->addChild(item);

    return true;
}

//响应菜单事件
void Menu::menuHandler(CCObject*)
{
    CCLog("I am Clicked");
}

执行结果:

当点中“Click Me”不松手,会一直打印“ Iam Clicked”直到松手



时间: 2024-11-10 07:26:38

Cocos2d-X中实现自定义菜单处理事件的相关文章

【Win 10应用开发】在RichEditBox中使用自定义菜单

前面给大伙儿简单介绍了RichEditBox控件的基本用法,以及解决其中的一些小问题. 本文咱们来看看如何自定义RichEditBox控件的上下文菜单. 原理比较简单,所以先说一说原理.当RichEditBox控件的上下文菜单即将弹出时,会引发ContextMenuOpening事件,我们需要处理该事件,并且将e.Handled属性设置为true,这样才能阻止默认上下文菜单的弹出. 首先,在RichEditBox控件上声明附加的菜单项,样板XAML如下: <RichEditBox Name=&quo

Java企业微信开发_04_自定义菜单

一.本节要点 1.菜单相关实体类的封装 参考官方文档中的请求包的内容,对菜单相关实体类进行封装. 这里需要格外注意的是,企业微信中请求包的数据是Json字符串格式的,而不是xml格式.关于json序列化的问题请参考上一节   Java企业微信开发_03_通讯录同步 2.创建菜单的接口 public static String create_menu_url = "https://qyapi.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS

微信自定义菜单扩容?

在微信公众账号“每日资讯”中,自定义菜单右侧出现了一个箭头图标,这是否意味着微信自定义菜单打算扩展?

2014-07-24 .NET实现微信公众号的消息回复与自定义菜单

今天是在吾索实习的第12天.我们在这一天中,基本实现了微信公众号的消息回复与自定义菜单的创建. 首先,是实现消息回复,其关键点如下: 读取POST来的数据流:Stream 数据流变量 = HttpContext.Current.Request.InputStream,并把其存入数组:数据流变量.Read(数组变量, 0, (int)数据流变量.Length) 后,再转换为字符串:string 字符串变量 = Encoding.UTF8.GetString(数组变量) . 在数据流所转换成的字符串

微信公众平台开发教程(五)自定义菜单

应大家强烈要求,将自定义菜单功能课程提前. 一.概述: 如果只有输入框,可能太简单,感觉像命令行.自定义菜单,给我们提供了很大的灵活性,更符合用户的操作习惯.在一个小小的微信对话页面,可以实现更多的功能.菜单直观明了,不仅能提供事件响应,还支持URL跳转,如果需要的功能比较复杂,我们大可以使用URL跳转,跳转至我们的网页即可. 注意:自定义菜单,只有服务号才有此功能 如何注册,见第一章:微信公众账号开发教程(一) 基本原理及微信公众账号注册 效果如下, 接着我们详细介绍,如何实现自定义菜单? 二

微信公众号开发之自动消息回复和自定义菜单

(一)微信公众号开发之VS远程调试 (二)微信公众号开发之基础梳理 (三)微信公众号开发之自动消息回复和自定义菜单 前言 上一篇我们大致讲解了下微信公众号开发的基本原理和流程概述.本章主要是对文本消息回复和自定义菜单做一个记录和分解 消息回复 处理请求,并响应 1)关注 也可参考官网文档:https://mp.weixin.qq.com/wiki 当微信用户关注公众账号时,可以给其适当的提示.可以是欢迎词,可以是帮助提示.示例代码如下: class EventHandler : IHandler

微信公众账号开发教程(四)自定义菜单

转自http://www.cnblogs.com/yank/p/3418194.html 一.概述: 如果只有输入框,可能太简单,感觉像命令行.自定义菜单,给我们提供了很大的灵活性,更符合用户的操作习惯.在一个小小的微信对话页面,可以实现更多的功能.菜单直观明了,不仅能提供事件响应,还支持URL跳转,如果需要的功能比较复杂,我们大可以使用URL跳转,跳转至我们的网页即可. 注意:自定义菜单,只有服务号才有此功能 如何注册,见第一章:微信公众账号开发教程(一) 基本原理及微信公众账号注册 效果如下

微信公众平台开发教程---自定义菜单

转载自:http://www.cnblogs.com/yank/p/3418194.html 一.概述: 如果只有输入框,可能太简单,感觉像命令行.自定义菜单,给我们提供了很大的灵活性,更符合用户的操作习惯.在一个小小的微信对话页面,可以实现更多的功能.菜单直观明了,不仅能提供事件响应,还支持URL跳转,如果需要的功能比较复杂,我们大可以使用URL跳转,跳转至我们的网页即可. 注意:自定义菜单,只有服务号才有此功能 如何注册,见第一章:微信公众账号开发教程(一) 基本原理及微信公众账号注册 效果

自定义菜单创建接口

自定义菜单接口可实现多种类型按钮,如下: 1.click:点击推事件用户点击click类型按钮后,微信服务器会通过消息接口推送消息类型为event的结构给开发者(参考消息接口指南),并且带上按钮中开发者填写的key值,开发者可以通过自定义的key值与用户进行交互: 2.view:跳转URL用户点击view类型按钮后,微信客户端将会打开开发者在按钮中填写的网页URL,可与网页授权获取用户基本信息接口结合,获得用户基本信息. 3.scancode_push:扫码推事件用户点击按钮后,微信客户端将调起