for i = 1, groupA:getNumChildren() do
local sprite = groupA:getChildAt(i)
if cute.anim[1]:collidesWith(sprite) then
youLoose()
end
end
local function youLoose()
local font3 = TTFont.new("billo.ttf", 20, " 1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,?")
local text7 = TextField.new(font2, "gameover")
text7:setPosition(200, 100)
stage:addChild(text7)
GameLost = Bitmap.new(Texture.new("gameover.jpg"))
Background : removeFromParent()
groupA : removeFromParent()
stage: addChild(GameLost)
alert()
end
它会出现'attempt to call global youLoose (a nil value)
的错误,我在哪里做错了?
答案 0 :(得分:2)
请注意,collideswith
与collidesWith
不同;如果您发布的错误是正确的,那么您发布的代码与您使用的代码不同。可能是该方法实际上被称为collidesWith
(似乎是sprite1
中的那个),但您使用了collideswith
。或者,如果发布的代码是您使用的代码,那么错误可能是attempt to call collideswith(a nil value)
,因此cute.anim[1]
不是sprite1
对象,但它不是n,否则错误会有所不同
修复此问题后,您会注意到在youLoose
循环之后定义了for
,当您调用youLoose()
时尚未定义它。在循环之前,您必须将local function youLoose()
函数移动到。因为循环本身不在函数中,而是在模块级别,所以它在任何后续代码之前执行,因此必须在循环之前定义循环中使用的任何函数(本地或全局)。
请注意,“松散”并不代表“失败”。检查Grammar-monster以查看差异。可能在任何地方你都有“松散”这个词,你应该改为“失去”。