长按按钮
来源:互联网 发布:淘宝运营什么书好 编辑:程序博客网 时间:2024/04/30 06:23
#pragma once
#include "cocos2d.h"
USING_NS_CC;
class LongTouch :
public cocos2d::CCNode, public cocos2d::CCTouchDelegate
{
CC_SYNTHESIZE(CCSprite*, m_normalSprite, NormalSprite);
CC_SYNTHESIZE(CCSprite*, m_shortTouchSprite, ShortTouchSprite);
CC_SYNTHESIZE(CCSprite*, m_longTouchSprite, LongTouchSprite);
public:
LongTouch(void);
~LongTouch(void);
virtual bool ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
virtual void ccTouchMoved(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
virtual void ccTouchEnded(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
bool initWithNormalImage(const char *normalImage,const char *shortTouchImage,const char *longTouchImage,cocos2d::CCObject* target, cocos2d::SEL_MenuHandler callLong,cocos2d::SEL_MenuHandler callShort);
bool initWithNormalSprite(CCSprite *normalSprite,CCSprite *shortTouchSprite,CCSprite *longTouchSprite,cocos2d::CCObject* target, cocos2d::SEL_MenuHandler callLong,cocos2d::SEL_MenuHandler callShort);
static LongTouch* create( const char *normalImage,const char *shortTouchImage,const char *longTouchImage,cocos2d::CCObject* target, cocos2d::SEL_MenuHandler callLong,cocos2d::SEL_MenuHandler callShort );
void updateTime(float dt);
protected:
virtual bool init();
cocos2d::CCObject* m_callTarget;
cocos2d::SEL_MenuHandler m_callLongTouch;
cocos2d::SEL_MenuHandler m_callShortTouch;
private:
float timer;
bool m_touched;
};
using namespace cocos2d;
LongTouch::LongTouch(void)
:m_callTarget(0)
{
}
LongTouch::~LongTouch(void)
{
}
bool LongTouch::ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent)
{
cocos2d::CCPoint p=pTouch->getLocation();
if (m_normalSprite)
{
p = m_normalSprite->convertToNodeSpaceAR(p);
if (m_normalSprite->boundingBox().containsPoint(p))
{
m_touched = true;
}
}
return true;
}
void LongTouch::ccTouchMoved(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent)
{
cocos2d::CCPoint p=pTouch->getLocation();
if (m_normalSprite)
{
p = m_normalSprite->convertToNodeSpaceAR(p);
if (m_normalSprite->boundingBox().containsPoint(p))
{
m_touched = true;
}
else
{
m_touched = false;
timer = 0;
}
}
}
void LongTouch::ccTouchEnded(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent)
{
cocos2d::CCPoint p=pTouch->getLocation();
if (m_normalSprite)
{
p = m_normalSprite->convertToNodeSpaceAR(p);
if (m_normalSprite->boundingBox().containsPoint(p))
{
if(timer>=0.5f)
{
if( m_callTarget )
{
((*m_callTarget).*m_callLongTouch)(this);
}
}
if(timer<0.5f)
{
if( m_callTarget )
{
((*m_callTarget).*m_callShortTouch)(this);
}
}
}
}
timer = 0;
m_touched = false;
m_normalSprite->setVisible(true);
m_shortTouchSprite->setVisible(false);
m_longTouchSprite->setVisible(false);
}
void LongTouch::updateTime(float dt)
{
if(m_touched)
{//不要用unschedule
timer += dt;
if(timer>=0.5f)
{
m_normalSprite->setVisible(false);
m_shortTouchSprite->setVisible(false);
m_longTouchSprite->setVisible(true);
}
else
{
m_normalSprite->setVisible(false);
m_shortTouchSprite->setVisible(true);
m_longTouchSprite->setVisible(false);
}
}
}
bool LongTouch::init()
{
cocos2d::CCTouchDispatcher* td = cocos2d::CCDirector::sharedDirector()->getTouchDispatcher();
td->addTargetedDelegate( this, 0, true );
this->schedule(schedule_selector( LongTouch::updateTime));
timer = 0;
m_touched = false;
return true;
}
LongTouch* LongTouch::create( const char *normalImage,const char *shortTouchImage,const char *longTouchImage,cocos2d::CCObject* target, cocos2d::SEL_MenuHandler callLong,cocos2d::SEL_MenuHandler callShort)
{
LongTouch* s = new LongTouch();
if(s->init())
{
s->initWithNormalImage(normalImage,shortTouchImage,longTouchImage,target, callLong,callShort);
s->autorelease();//自动释放
}
return s;
}
bool LongTouch::initWithNormalImage(const char *normalImage,const char *shortTouchImage,const char *longTouchImage,cocos2d::CCObject* target, cocos2d::SEL_MenuHandler callLong,cocos2d::SEL_MenuHandler callShort)
{
m_normalSprite = NULL;
m_shortTouchSprite = NULL;
m_longTouchSprite = NULL;
if (normalImage)
{
m_normalSprite = CCSprite::create(normalImage);
m_normalSprite->setVisible(true);
addChild(m_normalSprite);
}
if (shortTouchImage)
{
m_shortTouchSprite = CCSprite::create(shortTouchImage);
m_shortTouchSprite->setVisible(false);
addChild(m_shortTouchSprite);
}
if(longTouchImage)
{
m_longTouchSprite = CCSprite::create(longTouchImage);
m_longTouchSprite->setVisible(false);
addChild(m_longTouchSprite);
}
return initWithNormalSprite(m_normalSprite, m_shortTouchSprite, m_longTouchSprite, target,callLong,callShort);
}
bool LongTouch::initWithNormalSprite(CCSprite *normalSprite,CCSprite *shortTouchSprite,CCSprite *longTouchSprite,cocos2d::CCObject* target, cocos2d::SEL_MenuHandler callLong,cocos2d::SEL_MenuHandler callShort)
{
m_callLongTouch = callLong;
m_callShortTouch = callShort;
m_callTarget = target;
setNormalSprite(m_normalSprite);
setShortTouchSprite(m_shortTouchSprite);
setLongTouchSprite(m_longTouchSprite);
return true;
}
#include "cocos2d.h"
USING_NS_CC;
class LongTouch :
public cocos2d::CCNode, public cocos2d::CCTouchDelegate
{
CC_SYNTHESIZE(CCSprite*, m_normalSprite, NormalSprite);
CC_SYNTHESIZE(CCSprite*, m_shortTouchSprite, ShortTouchSprite);
CC_SYNTHESIZE(CCSprite*, m_longTouchSprite, LongTouchSprite);
public:
LongTouch(void);
~LongTouch(void);
virtual bool ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
virtual void ccTouchMoved(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
virtual void ccTouchEnded(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
bool initWithNormalImage(const char *normalImage,const char *shortTouchImage,const char *longTouchImage,cocos2d::CCObject* target, cocos2d::SEL_MenuHandler callLong,cocos2d::SEL_MenuHandler callShort);
bool initWithNormalSprite(CCSprite *normalSprite,CCSprite *shortTouchSprite,CCSprite *longTouchSprite,cocos2d::CCObject* target, cocos2d::SEL_MenuHandler callLong,cocos2d::SEL_MenuHandler callShort);
static LongTouch* create( const char *normalImage,const char *shortTouchImage,const char *longTouchImage,cocos2d::CCObject* target, cocos2d::SEL_MenuHandler callLong,cocos2d::SEL_MenuHandler callShort );
void updateTime(float dt);
protected:
virtual bool init();
cocos2d::CCObject* m_callTarget;
cocos2d::SEL_MenuHandler m_callLongTouch;
cocos2d::SEL_MenuHandler m_callShortTouch;
private:
float timer;
bool m_touched;
};
—————————————————————————————————————————————————————————————————————————————
using namespace cocos2d;
LongTouch::LongTouch(void)
:m_callTarget(0)
{
}
LongTouch::~LongTouch(void)
{
}
bool LongTouch::ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent)
{
cocos2d::CCPoint p=pTouch->getLocation();
if (m_normalSprite)
{
p = m_normalSprite->convertToNodeSpaceAR(p);
if (m_normalSprite->boundingBox().containsPoint(p))
{
m_touched = true;
}
}
return true;
}
void LongTouch::ccTouchMoved(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent)
{
cocos2d::CCPoint p=pTouch->getLocation();
if (m_normalSprite)
{
p = m_normalSprite->convertToNodeSpaceAR(p);
if (m_normalSprite->boundingBox().containsPoint(p))
{
m_touched = true;
}
else
{
m_touched = false;
timer = 0;
}
}
}
void LongTouch::ccTouchEnded(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent)
{
cocos2d::CCPoint p=pTouch->getLocation();
if (m_normalSprite)
{
p = m_normalSprite->convertToNodeSpaceAR(p);
if (m_normalSprite->boundingBox().containsPoint(p))
{
if(timer>=0.5f)
{
if( m_callTarget )
{
((*m_callTarget).*m_callLongTouch)(this);
}
}
if(timer<0.5f)
{
if( m_callTarget )
{
((*m_callTarget).*m_callShortTouch)(this);
}
}
}
}
timer = 0;
m_touched = false;
m_normalSprite->setVisible(true);
m_shortTouchSprite->setVisible(false);
m_longTouchSprite->setVisible(false);
}
void LongTouch::updateTime(float dt)
{
if(m_touched)
{//不要用unschedule
timer += dt;
if(timer>=0.5f)
{
m_normalSprite->setVisible(false);
m_shortTouchSprite->setVisible(false);
m_longTouchSprite->setVisible(true);
}
else
{
m_normalSprite->setVisible(false);
m_shortTouchSprite->setVisible(true);
m_longTouchSprite->setVisible(false);
}
}
}
bool LongTouch::init()
{
cocos2d::CCTouchDispatcher* td = cocos2d::CCDirector::sharedDirector()->getTouchDispatcher();
td->addTargetedDelegate( this, 0, true );
this->schedule(schedule_selector( LongTouch::updateTime));
timer = 0;
m_touched = false;
return true;
}
LongTouch* LongTouch::create( const char *normalImage,const char *shortTouchImage,const char *longTouchImage,cocos2d::CCObject* target, cocos2d::SEL_MenuHandler callLong,cocos2d::SEL_MenuHandler callShort)
{
LongTouch* s = new LongTouch();
if(s->init())
{
s->initWithNormalImage(normalImage,shortTouchImage,longTouchImage,target, callLong,callShort);
s->autorelease();//自动释放
}
return s;
}
bool LongTouch::initWithNormalImage(const char *normalImage,const char *shortTouchImage,const char *longTouchImage,cocos2d::CCObject* target, cocos2d::SEL_MenuHandler callLong,cocos2d::SEL_MenuHandler callShort)
{
m_normalSprite = NULL;
m_shortTouchSprite = NULL;
m_longTouchSprite = NULL;
if (normalImage)
{
m_normalSprite = CCSprite::create(normalImage);
m_normalSprite->setVisible(true);
addChild(m_normalSprite);
}
if (shortTouchImage)
{
m_shortTouchSprite = CCSprite::create(shortTouchImage);
m_shortTouchSprite->setVisible(false);
addChild(m_shortTouchSprite);
}
if(longTouchImage)
{
m_longTouchSprite = CCSprite::create(longTouchImage);
m_longTouchSprite->setVisible(false);
addChild(m_longTouchSprite);
}
return initWithNormalSprite(m_normalSprite, m_shortTouchSprite, m_longTouchSprite, target,callLong,callShort);
}
bool LongTouch::initWithNormalSprite(CCSprite *normalSprite,CCSprite *shortTouchSprite,CCSprite *longTouchSprite,cocos2d::CCObject* target, cocos2d::SEL_MenuHandler callLong,cocos2d::SEL_MenuHandler callShort)
{
m_callLongTouch = callLong;
m_callShortTouch = callShort;
m_callTarget = target;
setNormalSprite(m_normalSprite);
setShortTouchSprite(m_shortTouchSprite);
setLongTouchSprite(m_longTouchSprite);
return true;
}
- 长按按钮
- 长按按钮
- 【jQuery】长按按钮
- 按钮长按功能
- 【C#】按钮长按
- cocos2dx 按钮长按事件
- ios按钮长按事件
- Android自定义按钮实现长按功能
- Android自定义按钮实现长按功能
- [Cocos2d-js]长按按钮事件
- [UnityUI]UGUI按钮长按效果
- Unity3D UGUI按钮长按事件
- 按钮长按结束,实时进度动画
- 【iOS】自定义控件之长按按钮
- 按钮长按效果,类似微信录音按钮
- Unity自定义UI组件(四)双击按钮、长按按钮
- Unity自定义UI组件(四)双击按钮、长按按钮
- Unity UI案例(长按按钮和双击按钮案例
- Epoll在LT和ET模式下的读写方式
- Android 检查网络连接情况(参考整合)
- HTTP协议2
- tab键控制元素跳转
- GNU
- 长按按钮
- AE二次开发,通过代码向axPageLayout控件,插入图例和指北针的方法
- android 启动模式(二)
- 五 Django 1.5.4 User Authentication 用户认证
- POJ 2231 Moo Volume (暴力)
- 在Linux环境下安装和配置phpmyadmin
- linux ssh自动登录服务器
- Oracle学习笔记之表空间管理
- Android 编译环境配置搭建(Ubuntu 12.04)及环境导致编译错误QA