Luaは,観察者モードのようなリスニング変数を模倣して自動リフレッシュを変更する.
1763 ワード
Luaは,観察者モードのようなリスニング変数を模倣して自動リフレッシュを変更する.
最近、uluaをunityとして使用しているUIについて、最大の問題はインタフェースのリフレッシュ方法です.会社luaのアーキテクチャMVCの方式があまり理想的でないため、インタフェースのリフレッシュの上で比較的に卵が痛くて、1つのモニターが自動的にインタフェースをリフレッシュすることがなくて、すべて手作業でインタフェースのリフレッシュを制御して、仕事の効率が低くてBUGを出しやすいです.観察者モードについては詳しくは言わず、直接コードをつけます.
ここではhandlerを使用して、関数をバインドできます.
これにより、ある変数の値が変化したときに、登録されたリフレッシュ関数を自動的に呼び出すことができます.
最近、uluaをunityとして使用しているUIについて、最大の問題はインタフェースのリフレッシュ方法です.会社luaのアーキテクチャMVCの方式があまり理想的でないため、インタフェースのリフレッシュの上で比較的に卵が痛くて、1つのモニターが自動的にインタフェースをリフレッシュすることがなくて、すべて手作業でインタフェースのリフレッシュを制御して、仕事の効率が低くてBUGを出しやすいです.観察者モードについては詳しくは言わず、直接コードをつけます.
local ValueClass = {}
ValueClass.__index = ValueClass
function ValueClass:ctor(name)
-- body
self.method = nil
self.value = nil
self.name = name
end
function ValueClass:setMethod(method)
-- body
self.method = method
end
function ValueClass:setValue(value)
-- body
if self.value ~= value then
self.value = value
self.method(self)
end
end
function ValueClass.New(name,fuc)
local self = {}
setmetatable(self,ValueClass)
self:ctor(name)
self.method = fuc
return self
end
return ValueClass`
:
AppConst.SocketPort = 2012
AppConst.SocketAddress = "127.0.0.1"
this.Value = ValueClass.New("AppConst.SocketAddress",handler(this,this.UpdateFun))
this.Value:setValue(AppConst.SocketAddress)
this.Value1 = ValueClass.New("AppConst.SocketPort",handler(this,this.UpdateFun))
this.Value:setValue(AppConst.SocketPort)
-- valueClass
function Game:UpdateFun(Obj)
-- body
if Obj.name == "AppConst.SocketAddress" then
logWarn("------SocketAddress:UpdateFun:"..tostring(Obj.value))
elseif Obj.name == "AppConst.SocketPort" then
logWarn("------SocketPort:UpdateFun:"..tostring(Obj.value))
end
end
ここではhandlerを使用して、関数をバインドできます.
function handler(Obj,method)
return function ( ... )
return method(Obj,...)
end
end
これにより、ある変数の値が変化したときに、登録されたリフレッシュ関数を自動的に呼び出すことができます.