参考文章:
创新互联建站主要从事成都网站设计、网站制作、网页设计、企业做网站、公司建网站等业务。立足成都服务武清,十余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:13518219792http://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){ }
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。