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