您好,登錄后才能下訂單哦!
新事件分發(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
void NewScene::onTouchesBegan(const std::vector<Touch*>& touches, Event *unused_event) { CCLOG("began"); }
void HelloWorld::onTouchesMoved(const std::vector<Touch *> &touches, cocos2d::Event *event)
{
//多點(diǎn)
if(touches.size() > 1)
{
auto distance1 = touches[0]->getPreviousLocation().distance(touches[1]->getPreviousLocation());
auto distance2 = touches[0]->getLocation().distance(touches[1]->getLocation());
float scale = sprite->getScale() * ( distance2 / distance1);
scale = MIN(2,MAX(0.5, scale));
sprite->setScale(scale);
}
else
{
log("單點(diǎn)");
}
}
void NewScene::onTouchesEnded(const std::vector<Touch*>& touches, Event *unused_event) { CCLOG("End"); }
OK.于Cocos2d的多點(diǎn)觸摸的學(xué)習(xí)就分享到此,有講得不對(duì)的地方還望指出進(jìn)行探討互相學(xué)習(xí)!
免責(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)容。