cocos2d-x lua熱更新問題,過載reload
阿新 • • 發佈:2019-02-07
1、什麼是熱更新?
熱更新也叫不停機更新,是在遊戲伺服器執行期間對遊戲進行更新。實現不停機修正bug、修改遊戲資料等操作。也可以這樣講:一輛車以時速150km跑著,突然爆胎了,然後司機告訴你,我不停車,你去把輪胎換了,小心點。恩
2、熱更新原理
第一種:
lua中的require會阻止多次載入相同的模組。所以當需要更新系統的時候,要解除安裝掉響應的模組。(把package.loaded裡對應模組名下設定為nil,以保證下次require重新載入)並把全域性表中的對應的模組表置 nil 。同時把資料記錄在專用的全域性表下,並用 local 去引用它。初始化這些資料的時候,首先應該檢查他們是否被初始化過了。這樣來保證資料不被更新過程重置。
程式碼示例:
- function reloadUp(module_name)
- package.loaded[modulename] = nil
- require(modulename)
- end
第二種:
- function reloadUp(module_name)
- local old_module = _G[module_name]
-
package.loaded[module_name] = nil
- require (module_name)
- local new_module = _G[module_name]
- for k, v in pairs(new_module) do
- old_module[k] = v
- end
- package.loaded[module_name] = old_module
- end