cocos2dx 學習之自定義你的CCSprite(一)


  上一篇cocos2dx的教程,我們說到要用CCTableView創建背包,但是我們會看到我們的背包物品是不可以操作的。但在實際的游戲當中,背包里面的物品(裝備、葯材、任務物品之類)都是能夠響應各種事件(單機、雙擊、長按)的。但是我們都知道我們的CCSprite不能響應我們的各種事件的。那么着呢們辦呢,很簡單,自定義CCSprite了,給它加上Touch響應就ok了。

  那么我們要做的第一步就是要創建我們需要的類TestSprite 繼承CCSprite吧。創建我們的創建精靈的方法:

static TestSprite * TestSprite::testSpriteWithFile(const char* fileName)。ok,我們就照着CCSprite的方法寫一個static方法吧。上代碼。

TestSprite * TestSprite::testSpriteWithFile(const char* fileName){

    TestSprite *testSprite=new TestSprite();

    if(testSprite&&testSprite->initWithFile(fileName)){

        testSprite->autorelease();

        testSprite->customInit();//自定義的方法用來初始化自己的特殊屬性

        return testSprite;

    }

    CC_SAFE_DELETE(testSprite);

    return testSprite;

}

這些代碼就多說了。很簡單,當然不要忘記了構造和析構方法啊。這樣我們的自定義精靈就好了,但是現在它其實還是和之前沒有太大的差別,因為它還沒有響應Touch事件。那我們接下來就給它添加touch事件吧。

首先它需要繼承CCTouchDelegate(它是觸摸事件委托,就是系統捕捉到觸摸事件后交由它或者它的子類處理,所以我們在處理觸屏事件時,必須得繼承它)。引入它封裝的幾個方法:

    virtual bool ccTouchBegan(CCTouch *pTouch,CCEvent *pEvent);

    virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent) ;

    virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent) ;

    virtual void ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent); 

ok,到這里是不是看見很眼熟啊,在layer中的touch監聽也是這個幾個方法。其實CCLayer也是繼承自CCTouchDelegate。當然CCTouchDelegate不止這幾個方法。因為我們這里只需要單點觸控,所以我們這里只用了CCTargetedTouchDelegate里的幾個方法。

方法都引入之后,我們現在就給CCTouchDispatcher添加touch代理吧。代碼如下

void TestSprite::onEnter(){

    CCSprite::onEnter();

//    true是吞噬掉事件

    CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, -128, true);

}

void TestSprite::onExit(){

    CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this);

    CCSprite::onExit();

    

}

ok,現在我們的這個精靈就可以響應touch事件了,當然現在它只是能響應基本的touch事件。我們想要的雙擊和長按還沒有實現 ,這個我們下次再說。今天就說到這里,嗯,很晚了,該睡了,最近總能聽到程序員猝死的消息,挺可怕,程序員要關愛自己的身體啊(自從java老師去世之后,我這腦子啊~~~)。12點了,睡覺~~~~~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM