笨木头花心贡献,哈?花心?不,是用心~
转载请注明,原文地址:http://www.benmutou.com/archives/1789
文章来源:笨木头与游戏开发
[cce_lua] mSprite.setPosition(100, 20); mSprite:setPosition(100, 20); [/cce_lua]对于初次接触Lua的朋友来说,这简直就是噩梦,为嘛函数的调用有两种形式,是让我们随便挑的意思吗?
[cce_lua] TSprite = { x = 0, y = 0, } function TSprite.setPosition(x, y) TSprite.x = x; TSprite.y = y; end TSprite.setPosition(1, 2); print("TSprite坐标(" .. TSprite.x .. "," .. TSprite.y .. ")"); [/cce_lua]
其实就是创建了一个table,给这个table添加一些字段而已。
输出结果如下:[cce_lua] local who = TSprite; TSprite = nil; who.setPosition(1, 2); [/cce_lua]这么做一定会报错,虽然通过who确实可以成功调用setPosition函数,但函数里需要用到TSprite,而此时的TSprite已经为nil了。
[cce_lua] TSprite = { x = 0, y = 0, } function TSprite.setPosition(self, x, y) self.x = x; self.y = y; end local who = TSprite; TSprite = nil; who.setPosition(who, 1, 2); print("TSprite坐标(" .. who.x .. "," .. who.y .. ")"); [/cce_lua]输出结果仍然是:
[cce_lua] TSprite = { x = 0, y = 0, } function TSprite:setPosition(x, y) self.x = x; self.y = y; end第一,留意setPosition函数的定义,使用了冒号;
local who = TSprite; TSprite = nil; who:setPosition(1, 2); [/cce_lua]