深入cocos2d x中的touch事件

2022-07-18 15:39:31 字數 1489 閱讀 3299

在文章cocos2d-x中處理touch事件中簡單討論過怎樣處理touch事件, 那麼今天來深入了解下cocos2d-x中是怎樣分發touch事件的。

我們最先來看到cctouchdispatcher這個類, 這個類在cocos2d-x中是管理和分發touch事件, 這個類繼承於egltouchdelegate:

class cc_dll egltouchdelegate

};

那麼這個類是觸控的開始, 當然這裡指的只是cocos2d-x這個庫的外層介面, 而不包括opengl的部分。

在cctouchdispatcher類中有兩個方法: addstandarddelegate 和 addtargeteddelegate, 相信大家都用過的, 對, 這就新增多點和單點觸控的方法, 這個類裡面定義了兩個陣列來管理這些新增進來的delegate, 然後當touch事件傳到這個類時, 也就是會呼叫這個類的touchesbegan等這系列方法。而這四個方法都只是呼叫了下面這個方法:

void touches(ccset *ptouches, ccevent *pevent, unsigned int uindex);
而這個方法主要內容就是分發touch事件, 首先分發的是單點事件:

//判斷是否有單點的handler

if (utargetedhandlerscount > 0)

bool bclaimed = false;

if (uindex == cctouchbegan) //touchbegan

} else

if (phandler->getclaimedtouches()->containsobject(ptouch))

}//如果你返回了true並且你的類swallow掉了touch事件, 那麼下面的touch事件就不再繼續了

if (bclaimed && phandler->isswallowstouches())

break;}}

}}

這就是單點的事件了, 所以不論你把類的優先順序怎麼設定, 單點事件都是在多點事件之前處理的。而多點事件基本類似, 這裡就不再贅述了。

然後我們再回到新增delegate的方法上, 來看看優先順序的處理, addstandarddelegate 和 addtargeteddelegate都會呼叫下面這個新增方法:

void cctouchdispatcher::forceaddhandler(cctouchhandler *phandler, ccarray *parray)

if (h->getdelegate() == phandler->getdelegate())

}} parray->insertobject(phandler, u);

}

這個方法主要是按照delegate的優先順序來新增delegate, 所以**中就表明了優先順序數字越小, 優先順序就越高, 但是這只是針對同種型別的touch事件。

這個類的其他方法, 比如移除delegate等等就不在這裡贅述了, 好了, 這篇就到這裡了。

cocos2d x中的精靈

所有的遊戲都有 sprites 精靈,你可能知道或者不知道它們是什麼。精靈就是遊戲中在場景裡進行移動的物件。你可以操縱它們。精靈可能是遊戲中最主要的角色。我知道你在想什麼 難道每乙個圖形物件都是精靈sprite嗎?當然不是!為什麼?當你操縱乙個精靈的時候,它就是乙個精靈。如果你不對它進行操作,那它就...

Cocos2d x中的精靈

精靈的繼承關係 1.減少檔案讀取次數 2.減少opengl es繪製呼叫並且加速渲染 3.減少記憶體消耗 運用集方式為什麼會減少記憶體碎片?通常使用zwoptex和texturepacker設計和生成紋理圖集檔案,以及紋理圖集座標檔案 plist 組成。使用精靈幀快取 有以下幾種 1.紋理快取 2....

Cocos2d X中的粒子

cocos2d x引擎提供了強大的粒子系統,它在模仿自然現象 物理現象及空間扭曲上具備得天獨厚的優勢,為我們實現一些真實自然而又帶有隨機性的特效 如 烟花 水流 提供了方便 程式例項1 建立乙個烟花效果的方法1 ccsize winsize ccdirector shareddirector get...