码迷,mamicode.com
首页 > 其他好文 > 详细

自定义CCNode

时间:2014-09-09 21:20:09      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:des   blog   http   os   io   使用   ar   strong   art   

对Touch事件的获取与处理可以使用CCLayer, CCMenuItem等,但是如果我们需要一个虚拟按键或者需要对特定精灵进行拖动等等,我们就需要自定义Touch类。

 

自定义Touch事件处理类重要的步骤是:

1. 继承CCTargetedTouchDelegate

2. 添加addTargetedDelegate(pDelegate, nPriority, bSwallowsTouches),来获取Touch事件,第二个参数是优先级,越高越优先。

3. 根据自己的需要override Touch事件处理函数:

virtual bool ccTouchBegan(CCTouch* touch, CCEvent* event);
virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);
virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);

 

如下是实例:这里添加一个自定义的Button到场景层。

 

[cpp] view plaincopy
 
  1. #include <cocos2d.h>  
  2.   
  3. USING_NS_CC;  
  4.   
  5. class MyButton : public CCNode, public CCTargetedTouchDelegate  
  6. {  
  7. public:  
  8.     MyButton(void);  
  9.     ~MyButton(void);  
  10.   
  11.     virtual void onEnter();  
  12.     virtual void onExit();  
  13.   
  14.     virtual bool ccTouchBegan(CCTouch* touch, CCEvent* event);  
  15.     virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);  
  16.     virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);  
  17.   
  18.     virtual bool init();  
  19.     CREATE_FUNC(MyButton);  
  20.   
  21. private:  
  22.     CCSprite *m_ShowPic;  
  23. };  
[cpp] view plaincopy
 
  1. #include "MyButton.h"  
  2.   
  3. MyButton::MyButton(void):m_ShowPic(NULL)  
  4. {  
  5. }  
  6.   
  7. MyButton::~MyButton(void)  
  8. {  
  9. }  
  10.   
  11. bool MyButton::init()  
  12. {  
  13.     bool bRet = false;  
  14.     do  
  15.     {  
  16.         CCSize winSize = CCDirector::sharedDirector()->getWinSize();  
  17.   
  18.         m_ShowPic = CCSprite::create("share.png");  
  19.         m_ShowPic->setPosition(ccp(winSize.width/2, winSize.height/2));  
  20.         this->addChild(m_ShowPic);  
  21.   
  22.         bRet = true;  
  23.     } while(0);  
  24.     return bRet;  
  25. }  
  26.   
  27. void MyButton::onEnter()  
  28. {  
  29.     CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, true);  
  30.     CCNode::onEnter();  
  31. }  
  32.   
  33. void MyButton::onExit()  
  34. {  
  35.     CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this);  
  36.     CCNode::onExit();  
  37. }  
  38.   
  39. bool MyButton::ccTouchBegan(CCTouch* touch, CCEvent* event)  
  40. {  
  41.     CCLog("MyButton Touch Began!");  
  42.   
  43.     return true;  
  44. }  
  45.   
  46. void MyButton::ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent)  
  47. {  
  48.     CCLog("MyButton Touch Move!");  
  49. }  
  50.   
  51. void MyButton::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent)  
  52. {  
  53.     CCLog("MyButton Touch Ended!");  
  54. }  

 

将以下代码其添加到HelloWorldScene::init中,

[cpp] view plaincopy
 
  1. ////////////////////////////  
  2. // Add MyButton  
  3. MyButton *button = MyButton::create();  
  4. this->addChild(button, 10);  
  5. button->setPosition(CCPointZero);  

运行测试:

 

bubuko.com,布布扣
在屏幕中点击可以看到Output中显示了我们的CCLog提示

可是我们没有点击到图片时也会提示出CCLog,这并不是我们想要的。

那么我们就需要添加自己需要的Touch事件处理代码了:

例如如下:

 

[cpp] view plaincopy
 
    1. bool MyButton::ccTouchBegan(CCTouch* touch, CCEvent* event)  
    2. {  
    3.     CCPoint position = convertTouchToNodeSpaceAR(touch);  
    4.     if (!m_ShowPic->boundingBox().containsPoint(position))  
    5.         return false;  
    6.     CCLog("MyButton Touch Began!");  
    7.     // add your code...  
    8.       
    9.     return true;  
    10. }  
    11.   
    12. void MyButton::ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent)  
    13. {  
    14.     CCLog("MyButton Touch Move!");  
    15.     // add your code...  
    16. }  
    17.   
    18. void MyButton::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent)  
    19. {  
    20.     CCLog("MyButton Touch Ended!");  
    21.     // add your code...  
    22. }  

自定义CCNode

标签:des   blog   http   os   io   使用   ar   strong   art   

原文地址:http://www.cnblogs.com/MiniHouse/p/3963261.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!