在 Cocos2d-Lua 中,存在很多異步或延遲的操作,例如后臺加載圖片、等待一定時間執(zhí)行代碼等。這些功能的函數(shù)通常要求傳入一個 function 作為參數(shù)。
-- 在后臺加載一個圖像,加載完成后輸出消息
display.addImageAsync("hello.png", function()
print("load hello.png completed")
end)
但如果我們希望這種回調(diào)支持一個對象方法,就有點小困難了。因為 Lua 的對象方法在調(diào)用時需要使用 object:method() 形式,而回調(diào)是無法支持這種格式的。
好在 Lua 強(qiáng)大的閉包功能不但好用而且對性能無影響,所以我們可以將代碼改寫為:
local MyClass = class("MyClass")
function MyClass:print()
print("load hello.png completed")
end
----
local my = MyClass.new()
display.addImageAsync("hello.png", function()
my:print()
end)
原理非常簡單,就是在匿名函數(shù)里調(diào)用對象方法而已。
Quick 框架里已經(jīng)提供了更簡單的使用方法 handler() 函數(shù):
display.addImageAsync("hello.png", hander(my, my.print))