在文章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)這個方法主要是按照delegate的優先順序來新增delegate, 所以**中就表明了優先順序數字越小, 優先順序就越高, 但是這只是針對同種型別的touch事件。if (h->getdelegate() == phandler->getdelegate())
}} parray->insertobject(phandler, u);
}
這個類的其他方法, 比如移除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...