[英]citizen:/scripting/lua/scheduler.lua:61: attempt to call a nil value (upvalue 'fn')
[英]Corona SDK(LUA) - attempt to call upvalue 'spawnEnemy'(a nil value)
我只是尝试将eventListener添加到一个对象,当我点击它时它应该消失。 但我在标题中提到了错误。 这是我的整个代码:
-- housekeeping stuff
display.setStatusBar(display.HiddenStatusBar)
local centerX = display.contentCenterX
local centerY = display.contentCenterY
-- set up forward references
local spawnEnemy
-- preload audio
-- create play screens
local function createPlayScreen()
local bg = display.newImage("background.png")
bg.y = 130
bg.x = 100
bg.alpha = 0
local planet = display.newImage("planet.png")
planet.x = centerX
planet.y = display.contentHeight +60
planet.alpha = 0
transition.to( bg, { time = 2000, alpha = 1, y = centerY, x = centerX } )
local function showTitle()
local gametitle = display.newImage("gametitle.png")
gametitle.alpha = 0
gametitle:scale (4, 4)
transition.to( gametitle, { time = 500, alpha = 1, xScale = 1, yScale = 1 })
spawnEnemy()
end
transition.to( planet, { time = 2000, alpha = 1, y = centerY, onComplete = showTitle } )
end
-- game functions
local function shipSmash(event)
local obj = event.target
display.remove( obj )
end
local function spawnEnemy()
local enemy = display.newImage("beetleship.png")
enemy.x = math.random(20, display.contentWidth - 20)
enemy.y = math.random(20, display.contentHeight - 20)
enemy:addEventListener ( "tap", shipSmash )
end
local function startGame()
end
local function planetDamage()
end
local function hitPlanet(obj)
end
createPlayScreen()
startGame()
这是错误窗口的样子:
我是这个领域的新手(LUA编程)所以很抱歉可能是愚蠢的语法错误或其他什么,但我看到的是我写这行代码后出现这个错误: enemy:addEventListener ( "tap", shipSmash )
将local function spawnEnemy()
更改为function spawnEnemy()
因为此变量已在前面声明过。 是的,这是初学者的典型Lua陷阱。
您已将spawnEnemy
声明为局部变量两次。 这是允许的(第二个隐藏第一个,其中第二个在范围内),但这不是你想要的。
您已正确声明了一个局部变量并在showTitle
捕获了它。 要在以后设置同一个变量,请使用赋值语句,而不使用local
前缀。 您可以使用“匿名”函数语法为其分配函数定义:
spawnEnemy = function()
...
end
实际上,在Lua中, 所有函数都是匿名的,因为它们只是值。 但是,对于调试,使用与函数关联的名称会很有帮助。 在堆栈跟踪中,尽可能使用用于调用该函数的变量的名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.