1. 程式人生 > >cocos2d-x lua熱更新問題,過載reload

cocos2d-x lua熱更新問題,過載reload

1、什麼是熱更新?

熱更新也叫不停機更新,是在遊戲伺服器執行期間對遊戲進行更新。實現不停機修正bug、修改遊戲資料等操作。也可以這樣講:一輛車以時速150km跑著,突然爆胎了,然後司機告訴你,我不停車,你去把輪胎換了,小心點。恩

2、熱更新原理

第一種:

lua中的require會阻止多次載入相同的模組。所以當需要更新系統的時候,要解除安裝掉響應的模組。(把package.loaded裡對應模組名下設定為nil,以保證下次require重新載入)並把全域性表中的對應的模組表置 nil 。同時把資料記錄在專用的全域性表下,並用 local 去引用它。初始化這些資料的時候,首先應該檢查他們是否被初始化過了。這樣來保證資料不被更新過程重置。 

程式碼示例:

  1. function reloadUp(module_name)  
  2.     package.loaded[modulename] = nil  
  3.     require(modulename)  
  4. end  
這種做法簡單粗暴,雖然能完成熱更新,但是問題很多,舊的引用的模組無法得到更新,這種程度的熱更新顯然不能滿足現在的遊戲開發需求。

第二種:

  1. function reloadUp(module_name)  
  2.     local old_module = _G[module_name]  
  3.     package.loaded[module_name] = nil  
  4.     require (module_name)  
  5.     local new_module = _G[module_name]  
  6.     for k, v in pairs(new_module) do
  7.         old_module[k] = v  
  8.     end  
  9.     package.loaded[module_name] = old_module  
  10. end