【iOS-Cocos2d遊戲開發之六】對觸屏事件追加講解,解決無法觸發ccTouchMoved事件[重要!]

來源:互聯網
上載者:User

 李華明Himi 原創,轉載務必在明顯處註明:
轉載自【黑米GameDev街區】 原文連結: http://www.himigame.com/iphone-cocos2d/453.html

上一章節中介紹了,如何利用兩種方式對使用者觸屏進行監聽,那麼今天要重點講解一個問題;

要講的問題主要是在使用註冊監聽(事件分配方式監聽觸屏)中的問題,上一章節中說過,此種方式首先要註冊:如下代碼:

//註冊獨立觸摸事件[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];

那麼如果多個註冊監聽的話,可以根據優先順序(priority)參數進行設定,此參數的值越大,優先順序越低,假設有XX與YY註冊了監聽,如果XX優先順序>YY的話,那麼首先會進入XX的監聽函數;

使用上面的方式進行監聽的話,會進行監聽以下這幾個事件:

- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event{return NO;}- (void)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event{ }- (void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event{}

如果XX中的ccTouchBegan函數中返回Yes的話,就不會響應其他監聽的(YY)中重寫的監聽函數;這個上一章節中介紹過;但是要說的也正是這裡,如果你想要XX與YY都監聽事件,那麼兩個都可以在ccTouchBegan中返回NO,但是如果你想在處理YY或者XX中的ccTouchMoved移動事件函數中的話,你會發現XX與YY都不會響應其函數,原因是,當你retrun NO;的時候雖然執行了ccTouchBegan與return之間的代碼,但是你return NO其實就是告訴cocos2d放棄此次事件處理,讓cocos2d繼續將觸屏事件分配給其他註冊過的類去處理監聽,直到結束或者cocos2d擷取到return true為止;

那麼解決的方案:比如你想監聽YY類中的ccTouchMoved事件,那麼為了不影響XX中的監聽ccTouchBegan事件,你應該讓XX類在註冊監聽的時候讓其優先順序調整高於YY類,並且XX類中ccTouchBegan函數return NO,那麼當使用者觸屏後,首先進入XX類中處理事件,然後會(因為XX類return NO)進入YY類,那麼在YY類的ccTouchBegan函數中因為return YES;這樣cocos2d就能響應ccTouchMoved函數了;

如果說你想讓XX與YY類都響應ccTouchMoved函數,至少我利用此種事件分配的方式無法實現,不知道是不是cocos2d的1.0版本遺留的BUG還是其他原因,今天遇到所以拿出來跟大家分享;

OK,該睡覺了,晚安大家~ ~~~~~~

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.