在游戲中會(huì)存在著大量的紅點(diǎn),告訴玩家對(duì)應(yīng)的系統(tǒng)有獎(jiǎng)勵(lì)領(lǐng)取或者,體力滿足,活動(dòng)狀態(tài)等。
整個(gè)游戲就就如同一顆樹(shù),主場(chǎng)景就類似根,面板上的各種系統(tǒng)和活動(dòng)就是對(duì)應(yīng)的子樹(shù)。每個(gè)系統(tǒng)又有可能存在0~n個(gè)子系統(tǒng),結(jié)構(gòu)如圖,就是一顆倒立的樹(shù),畫的比較丑,莫見(jiàn)怪^.^:

從圖中可以看出每個(gè)系統(tǒng)都類似一顆顆子樹(shù)。玩過(guò)游戲的都知道。當(dāng)子系統(tǒng)有紅點(diǎn),那么他的上一級(jí),上上級(jí)都要顯示紅點(diǎn),這樣玩家在主面板看到對(duì)應(yīng)系統(tǒng)icon上顯示了紅點(diǎn)就知道內(nèi)部有可領(lǐng)取或可操作的東西。
這里只提供本人的思路,需要紅點(diǎn)變化的地方只要監(jiān)聽(tīng)RED_REFLASH_EVENT就可以:
1.1.紅點(diǎn)管理類 RedManager 管理所有注冊(cè)進(jìn)來(lái)的紅點(diǎn)。注冊(cè)到一個(gè)redPoints表中
1.2.需要一個(gè)因事件變更,收集因這個(gè)事件變更的紅點(diǎn)的表。reflashReds = {}
比如等級(jí)變化 導(dǎo)致升級(jí)面板紅點(diǎn)更新 頭銜滿足等級(jí)需求可激活紅點(diǎn),那么就要將這兩個(gè)redPoint添加進(jìn)reflashReds表中
1.3.喚醒timer 執(zhí)行update方法 ,方法中如果發(fā)現(xiàn)reflashReds中有數(shù)據(jù) 就要一一移除進(jìn)行check檢查紅點(diǎn)變化。如red =?reflashReds[1]? ? ? ? ? ? ?red:check()? ? ? ? ?table.remove(reflashReds,1)
1.4.當(dāng)update執(zhí)行一定次數(shù) 比如3次就post一次RED_REFLASH_EVENT事件
1.5.提供兩個(gè)get方法分別獲取redPoint對(duì)象和redPoint數(shù)量
大致圖就這樣 好丑的圖:

2.1.紅點(diǎn)節(jié)點(diǎn)RedPoint:每個(gè)紅點(diǎn)有紅點(diǎn)名稱name,有0~n個(gè)子紅點(diǎn)用childs = {},需要注冊(cè)到紅點(diǎn)管理器中,需要添加到父紅點(diǎn)中
2.2.需要提供一個(gè)get紅點(diǎn)數(shù)量的方法
2.3.需要一個(gè)用于檢查紅點(diǎn)變化的方法 check(),如果紅點(diǎn)發(fā)生變化更新redNum并返回true 否在false

3.1每個(gè)系統(tǒng)紅點(diǎn)類:如RedRoleSys

整理的可能各位大佬看不明白,請(qǐng)見(jiàn)諒,用于自己梳理記錄。