溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

【Cocos2d開(kāi)發(fā)】淺析Cocoss2d下的多點(diǎn)觸控

發(fā)布時(shí)間:2020-08-08 05:02:03 來(lái)源:網(wǎng)絡(luò) 閱讀:444 作者:小明咧 欄目:開(kāi)發(fā)技術(shù)

新事件分發(fā)機(jī)制:在2.x 版本事件處理時(shí),將要觸發(fā)的事件交給委托代理(delegate)處理,再通過(guò)實(shí)現(xiàn)代理里面的onTouchBegan等方法接收事件,最后完成事件的響應(yīng)。而在新的事件分發(fā)機(jī)制中,只需通過(guò)創(chuàng)建一個(gè)事件監(jiān)聽(tīng)器-用來(lái)實(shí)現(xiàn)各種觸發(fā)后的邏輯,然后添加到事件分發(fā)器_eventDispatcher,所有事件監(jiān)聽(tīng)器有這個(gè)分發(fā)器統(tǒng)一管理,即可完成事件響應(yīng)。

事件監(jiān)聽(tīng)器有以下幾種:

  • 觸摸事件 (EventListenerTouch)

  • 鍵盤(pán)響應(yīng)事件 (EventListenerKeyboard)

  • 鼠標(biāo)響應(yīng)事件 (EventListenerMouse)

  • 自定義事件 (EventListenerCustom)

  • 加速記錄事件 (EventListenerAcceleration)

_eventDispatcher的工作由三部分組成:

  • 事件分發(fā)器 EventDispatcher

  • 事件類(lèi)型 EventTouch, EventKeyboard 等

  • 事件監(jiān)聽(tīng)器 EventListenerTouch, EventListenerKeyboard 等

監(jiān)聽(tīng)器實(shí)現(xiàn)了各種觸發(fā)后的邏輯,在適當(dāng)時(shí)候由事件分發(fā)器分發(fā)事件類(lèi)型,然后調(diào)用相應(yīng)類(lèi)型的監(jiān)聽(tīng)器。

這里我們主要來(lái)了解Cocos2d3.x版本下的觸摸事件中的多點(diǎn)觸摸擴(kuò)大縮放如何實(shí)現(xiàn)

[cpp] view plaincopy

  1. void NewScene::onTouchesBegan(const std::vector<Touch*>& touches, Event *unused_event)    { CCLOG("began"); }  

  2.   

  3. void HelloWorld::onTouchesMoved(const std::vector<Touch *> &touches, cocos2d::Event *event)  

  4. {  

  5.     //多點(diǎn)  

  6.     if(touches.size() > 1)  

  7.     {  

  8.         auto distance1 = touches[0]->getPreviousLocation().distance(touches[1]->getPreviousLocation());  

  9.         auto distance2 = touches[0]->getLocation().distance(touches[1]->getLocation());  

  10.           

  11.         float scale = sprite->getScale() * ( distance2 / distance1);  

  12.         scale = MIN(2,MAX(0.5, scale));  

  13.           

  14.         sprite->setScale(scale);  

  15.     }  

  16.     else  

  17.     {  

  18.         log("單點(diǎn)");  

  19.     }  

  20. }  

  21.   

  22. void NewScene::onTouchesEnded(const std::vector<Touch*>& touches, Event *unused_event)    { CCLOG("End"); }  



分發(fā)器中注冊(cè)這四個(gè)方法就可以直接實(shí)現(xiàn)多點(diǎn)觸摸。

OK.于Cocos2d的多點(diǎn)觸摸的學(xué)習(xí)就分享到此,有講得不對(duì)的地方還望指出進(jìn)行探討互相學(xué)習(xí)!


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI