LanguageModule(語言模塊)
附上IFramework 下載地址:IFramewrok
IFramework QQ交流群:782290296
該模塊主要封裝的是各國語言之間的切換,最核心的類是:
1.LanguageModule 語言模塊類
2.DelegateLanguageObserver 語言觀察者類
3.LanPair 語言欄位類
首先看到LanPair類

我已經寫上注釋了,其實每一個LuaPair物件,就是封裝了一段文字,并記錄這段文字所屬的語言和唯一標識,之后切換語言也是以該唯一標識進行切換的,
在看到DelegateLanguageObserver (語言觀察者類)

其實很好理解,剛才說的LanPair類就是以文字欄位為單位的,而這個DelegateLanguageObserver類是管理LanPair的唯一標識在每種語言之間的切換,

切換語言型別,主要邏輯為當該觀察者未被釋放或暫停時,執行該觀察者切換邏輯,也就是對應的委托函式,并記錄當前切換的語言型別

創建觀察者物件時從模塊中呼叫該方法進行初始化,并呼叫語言模塊的系結方法,該系結方法下面會講,

為觀察者物件增加切換邏輯
最后看到LanguageModule(語言模塊)
該類主要封裝了對每個LanPair物件和觀察者物件的管理,

這個類我們結合實際例子來看

首先這里實體化了兩個LanPair,也就是語言欄位,

在Awake函式中創建了語言模塊,并加載了上面的兩個LanPair物件,我們看模塊的Load方法是怎么實作的,

就是將加載進來的LanPair相應的保存到上面提到的觀察者串列,欄位字典等等里面,應該不難理解,
再回到Awake中的下一句,呼叫了CreateDelegateObserver函式,顧名思義,就是創建觀察者,我們進到里面去看

從物件池中取出一個觀察者物件,并對該觀察者進行初始化,這個初始化我們上面有提到,最后一步是呼叫語言模塊的系結方法Subscribe,

主要邏輯是將觀察者物件存進字典,并去呼叫一次他的切換語言方法,這個方法上面有提到,
忘記的可以往上翻,然后回傳觀察者,
創建完了之后還去呼叫了Listen方法,繼續進到listen方法

增加觀察者邏輯,上面也說了,

在Update函式中,他去更改了語言模塊中的languge屬性,

當用戶修改了該屬性,也就是切換語言的時候,他會去執行Publish方法,


該方法的主要邏輯是,
遍歷所有的觀察者,并在LuaPair字典中找到該觀察者對應的唯一標識對應的語言欄位存不存在,存在即呼叫他的切換語言方法(該方法上面有提到,自己翻),若沒有找到,即判斷該觀察者的默認語言是否存在,存在即使用默認語言對應的欄位,
主要邏輯就是這些,不喜勿噴
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/244709.html
標籤:其他
下一篇:手游作弊(二)-記憶體讀寫實體
