笨木头花心贡献,哈?花心?不,是用心~
转载请注明,原文地址: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
local who = TSprite;
TSprite = nil;
who:setPosition(1, 2);
[/cce_lua]
第一,留意setPosition函数的定义,使用了冒号;