日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

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

EventDispatch機制

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

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具有不同的優先級。

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 精品国产乱码久久久久久久软件 | 国产精品久久久av | 欧美日韩成人一区 | 亚洲一区二区视频在线 | 午夜不卡av免费 | www.av在线| 久久在线播放 | 国产精品一区一区三区 | 99精品国产高清在线观看 | 日韩欧美一区二区三区 | 国产一区二区毛片 | 美女视频一区二区 | 五月毛片 | 欧美午夜一区二区 | 91精品国产综合久久久久久丝袜 | 99精品小视频 | 日本精品视频在线 | 久热国产精品视频一区二区三区 | 午夜美女视频 | 日韩av成人在线观看 | 国产精品一区二区免费 | a天堂视频 | 日韩欧美视频一区 | www.91视频聊天.com | 在线成人一区 | 久久久久久久成人 | 在线久| 国产精品一区二区三区四区 | 欧美日韩免费视频 | 国产日韩一区二区 | 国产一区二区三区的电影 | 精品三级在线观看 | 久久精品这里热有精品 | 在线欧美一区 | 久久精品国产99 | 国产资源在线观看 | 国产精品久久久久久吹潮 | 国产成人精品一区二区三区 | 欧美日韩在线观看中文字幕 | 秋霞精品| www.日韩精品 |