KSFramework中,全部的UI Lua腳本是能夠重載的。腳本中的一些內存數據,在重載後會丟失,好比:php
-- 記錄一個UI界面被打開了多少次 local openCount = 0 function UILogin:OnOpen() openCount = openCount + 1 end return UILogin
如上,每一次的腳本Reload,都是對openCount變量從新初始化爲0,這與實際需求不符。html
爲此,KSFramework中引入了Cookie機制——把狀態值存起來,避免被腳本重載所影響,以上代碼用加入Cookie機制:git
function UILogin:OnOpen() local openCount= Cookie.Get('UILogin.OpenCount') if not openCount then openCount = 0 end openCount = openCount + 1 Cookie.Set('UILogin.OpenCount', openCount) end return UILogin
cookie常見於http開發中,網站爲了辨別用戶身份而儲存在用戶本地終端上的數據,能夠叫作瀏覽器緩存。
http是一種無狀態協議,好比在用php語言開發http網站時,開發者對代碼的改動只需刷新瀏覽器就能夠馬上看到本身的改動,無需進行進程的啓停操做,開發起來十分方便。這也是php語言大熱的其中一個緣由。github
KSFramework採用Lua來進行UI開發,支持熱重載來迅速修改代碼;對Lua代碼的熱重載最重要的考慮因素就是Lua運行內存狀態會丟失。瀏覽器
所以,KSFramework參考將HTTP領域的Cookie機制引入遊戲開發,全部的本地狀態值,都存放在Cookie中,邏輯與狀態分離。寫代碼的過程即邏輯的過程,並不會影響當前的狀態。 緩存
Cookie的具體實現很是的簡單,它只不過是一個Hashtable,進行get/set操做,獲取或設置任意的對象:cookie
圖:Cookie的代碼實現框架
以 快速入門的隨機公告 爲例子:每一次重載lua腳本,都會從新進行隨機。 有什麼辦法,讓這個例子中,首次加載進行隨機出1~3的數字?dom
這個數字保存到Cookie。在咱們對腳本邏輯修改後,進行LUA腳本重載,這時候從Cookie中拿回以前隨機的值進行使用。網站
-- 當不存在Cookie時,進行隨機;存在Cookie,直接取值 local rand = Cookie.Get('UIBillboard.RandomNumber') if not rand then rand = math.random(1,3) Cookie.Set('UIBillboard.RandomNumber') end
簡而言之——把狀態信息保存到Cookie中,與邏輯代碼分離。
固然了,這裏說的Cookie,跟HTTP的Cookie是不一樣的,僅僅是名稱的借用,來解決相似的問題。
文/公的Kelly[mr-kelly](簡書做者) Email: 23110388@qq.com
原文連接:http://www.jianshu.com/p/eebd5cfce87f
著做權歸做者全部,轉載請聯繫做者得到受權,,並標註「簡書做者」。
github地址:https://github.com/mr-kelly/KSFramework
歡迎你們到 github提issues