cocos2d-x CCSprite 精灵监听点击事件

参考文章:

cocos2d-x 精灵监听点击事件

http://labs.easymobi.cn/?p=5167

实现过程,实现CCTouchDelegate接口,在enter 的时候添加监听,exit 和析构时移除监听,点击时将touch 的坐标转化为相对精灵的坐标,如果是否在精灵的范围内,则响应点击。主要是参考前面两篇文章中的例子,不同的地方在判断区域,个人觉得太复杂。所以稍微修改了下,看起来更容易理解。

PianoTile.h

class PianoTile : public cocos2d::CCSprite,public cocos2d::CCTouchDelegate
{
public:
    
    PianoTile();
    ~PianoTile();
    
    //life cycle
    virtual void onEnter();
    virtual void onExit();
    //touch
    virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);
    virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);
};

PianoTile.cpp

#include "PianoTile.h"
USING_NS_CC;

#pragma mark - Public Methods
PianoTile::~PianoTile()
{
    CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this);
    _delegate = NULL;
}

#pragma mark Lifecyle
void PianoTile::onEnter(){
    CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, false);
    CCSprite::onEnter();
}

void PianoTile::onExit(){
    CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this);
    CCSprite::onExit();
}

#pragma mark Touch Delegate

bool PianoTile::ccTouchBegan(CCTouch *pTouche, CCEvent *pEvent){
    CCPoint touchLocation = pTouche->getLocation();
    CCPoint localPoint = convertToNodeSpace(touchLocation);
    CCRect rect = CCRectMake(0, 0, boundingBox().size.width, boundingBox().size.height);
    bool isTouched = rect.containsPoint(localPoint);
    if (isTouched && _delegate) {
        _delegate->pianoTileClick(this);
    }
    
    return isTouched;
}

void PianoTile::ccTouchEnded(CCTouch *pTouche, CCEvent *pEvent){
    
}

cocos2d-x CCSprite 精灵监听点击事件

时间: 2024-10-10 01:48:00

cocos2d-x CCSprite 精灵监听点击事件的相关文章

IOS之UI--自定义按钮实现代理监听点击事件

前言: Objective-C提供的按钮监听事件的方法是 不含参数的监听方法 [button实例对象 addTarget:self action:@selector(func) forControlEvents:UIControlEventTouchUpInside]; 含参数的监听方法 [button实例对象 addTarget:self action:@selector(func:) forControlEvents:UIControlEventTouchUpInside]; 下面通过代理的

CCLayer 监听点击事件

根据CCLayer 的源代码,若touchEnable为true, 在onEnter(),onExit()分别会注册监听及解除监听,这样一样就不会自己写监听.需要注意的是默认监听多点触摸,即不会调用 virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent); 另外CCLayer提供了一个setTouchMode(ccTouchesMode mode) 来设定监听点击的类型,typedef enum { kCCTouchesAllAtO

Android监听点击事件实现的三种方法

监听点击事件实现的三种方法:1.匿名内部类2.外部类3.直接实现接口 1.匿名内部类: package com.jereh.calculator; import android.content.Context; import android.os.Bundle; import android.os.PersistableBundle; import android.support.design.widget.FloatingActionButton; import android.support

swift项目第六天:中间发布按钮的封装以及监听点击事件

import UIKit /* 总结:1:给UIButton写分类,新建文件swiftFile,一般为了区分起名字都是名字-Extension,要想调用UI控件需要导入 import UIKit框架,然后给系统的类写分类:extension UIButton {},提供类方法或是构造函数的方法,把与该控件有关的业务逻辑全封装在分类的内部.2:封装方法:类方法:都是以class开头,class func 函数名(参数)->返回值类型{业务逻辑代码,return 返回值}:例子: class fun

iOS7_ios7_如何实现UIAlertView以及监听点击事件(其它样式)_如何修改UITextField默认键盘样式

首先我们知道,UIAlertView实际上有多种样式,在xcode中,按住cmd点击UIAlertView,进入头文件我们看到: 1 typedef NS_ENUM(NSInteger, UIAlertViewStyle) { 2 UIAlertViewStyleDefault = 0, //默认样式 3 UIAlertViewStyleSecureTextInput, //加密文本样式 4 UIAlertViewStylePlainTextInput, //普通文本样式 5 UIAlertVi

ios7_如何实现UIAlertView以及监听点击事件

1.在viewController的.m文件,遵守<UIAlertViewDelegate>代理协议 @interface moboViewController () <UIAlertViewDelegate> 2.在 - (void)viewDidLoad 方法中实现UIAlertView 1 - (void)viewDidLoad 2 { 3 [super viewDidLoad]; 4 5 // 1.初始化 alertView 6 UIAlertView *altView =

Button监听点击事件的五种方式

常用方式为匿名类和本类监听的方法.其中本类监听方法需要继承View.OnClickListener接口之后,重写onClick方法. PS:重写某一个方法的快捷键为Ctrl+O package com.example.kimberjin.reviewpro;  import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity;

Android监听连续点击次数代码实现

一般实现 我们知道,一般实现双击事件,可以通过new OnClickListener()监听点击事件,然后记录前后两次点击距离开机的时间,由时间差在一定范围实现,代码如下: long firstClickTime = 0; @Override public void onClick(View view) { if(firstClickTime > 0){ long secondClickTime = SystemClock.uptimeMillis();//距离上次开机时间 long dtime

(转)NGUI研究院之三种方式监听NGUI的事件方法

NGUI事件的种类很多,比如点击.双击.拖动.滑动等等,他们处理事件的原理几乎万全一样,本文只用按钮来举例. 1.直接监听事件 把下面脚本直接绑定在按钮上,当按钮点击时就可以监听到,这种方法不太好很不灵活. 1 2 3 4 void OnClick() { Debug.Log("Button is Click!!!"); }   2.使用SendMessage 选择按钮后,在Unity导航菜单栏中选择Component->Interaction->Button Messag