多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 互聯網 > EventDispatch機制

EventDispatch機制

來源:程序員人生   發布時間:2014-11-18 08:43:31 閱讀次數:3205次

cocos2dx 3.x中的事件機制原理:

通過訪問Node的全局Zorder來排列優先級。

            _globalZOrderNodeMap[node->getGlobalZOrder()].push_back(node);


_globalZOrderNodeMap 作為迭代的容器,最后處理根節點排序的結果(會清算掉當前寄存的節點),真正有效的數據時排列好的:_nodePriorityMap。

首先遍歷Scene下的所有子Layer(Node*),把子節點中比當前Layer優先級數值小的寄存在_nodePriorityMap,接著清除子Layer中比當前Layer優先級小的節點,然后把當前節點放入_globalZOrderNodeMap 。

每一個Node都有1個sortChildren操作,排列出來的就是根據Zorder,只要先處理比當前Layer深度優先的(Zorder),再處應當前layer,和小于或等于的Children――全部原理就跟2叉樹中序遍歷比較類似,判定條件是Zorder。

oid EventDispatcher::visitTarget(Node* node, bool isRootNode) { int i = 0; auto& children = node->getChildren(); auto childrenCount = children.size(); if(childrenCount > 0) { Node* child = nullptr; // visit children zOrder < 0 for( ; i < childrenCount; i++ ) { child = children.at(i); if ( child && child->getLocalZOrder() < 0 ) visitTarget(child, false); else break; } if (_nodeListenersMap.find(node) != _nodeListenersMap.end()) { _globalZOrderNodeMap[node->getGlobalZOrder()].push_back(node); } for( ; i < childrenCount; i++ ) { child = children.at(i); if (child) visitTarget(child, false); } } else { if (_nodeListenersMap.find(node) != _nodeListenersMap.end()) { _globalZOrderNodeMap[node->getGlobalZOrder()].push_back(node); } } //遞歸的所有進程中只有根節點進入(Scene),事件的派發級是根據<span style="font-family: Arial, Helvetica, sans-serif;">_nodePriorityMap中的結果去派發</span> if (isRootNode) { std::vector<float> globalZOrders; globalZOrders.reserve(_globalZOrderNodeMap.size()); for (const auto& e : _globalZOrderNodeMap) { globalZOrders.push_back(e.first); } std::sort(globalZOrders.begin(), globalZOrders.end(), [](const float a, const float b){ return a < b; }); for (const auto& globalZ : globalZOrders) { for (const auto& n : _globalZOrderNodeMap[globalZ]) { _nodePriorityMap[n] = ++_nodePriorityIndex; } } _globalZOrderNodeMap.clear(); } }


_nodePriorityIndex 為SceneGraphPriority控制量,最后組合成從0到N不重復的數字隊列,去標示每一個Node,所有的Node具有不同的優先級。

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 欧美亚洲不卡 | 精品国产一区二区三区www | 亚洲视频免费 | 亚洲a毛片| 免费一级欧美片片线观看 | 国产做人爱三级视频在线 | 中文无码日韩欧免费视频 | 久久久久久久久久久观看 | 国产综合在线观看 | 欧美激情精品久久久久 | 最近高清中文字幕大全免费1 | 五月天精品视频播放在线观看 | 最新国产在线观看福利 | 波多野结衣视频在线观看 | 欧美特黄一片aa大片免费看 | 一级特黄aa大片一又好看 | 国产高清一区二区三区视频 | 亚洲 欧美 精品 中文第三 | 亚洲精品国产精品国自产网站 | 成人叼嘿视频免费网站 | 人善交video 人善交videos欧美3 | 日本番囗 | 明星三级国产免费播放 | 亚洲综合日韩精品欧美综合区 | 国产精品自在线 | 亚洲人成伊人成综合网久久久 | 日韩一区二区久久久久久 | 国产精品久久毛片蜜月 | 久久精品国产网红主播图片 | 12306播播影视播播影院午夜 | 都市激情校园春色亚洲 | 无码精品一区二区三区免费视频 | 亚洲欧洲春色校园另类小说 | 天天躁夜夜燥2021 | 亚洲国产一区二区三区最新 | 亚洲jizzjizz中文在线播放 | 中文字幕乱偷乱码亚洲 | 欧美高清xxxx性 | 久久婷婷五月综合色丁香 | 日本午夜视频在线观看 | 日本高清精品动漫 |