我只是尝试将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 )
答案 0 :(得分:3)
将local function spawnEnemy()
更改为function spawnEnemy()
,因为此变量已在前面声明过。是的,这是初学者的典型Lua陷阱。
答案 1 :(得分:1)
您已将spawnEnemy
声明为局部变量两次。这是允许的(第二个隐藏第一个,其中第二个在范围内),但这不是你想要的。
您已正确声明了一个局部变量并在showTitle
中捕获了该变量。要在以后设置同一个变量,请使用赋值语句,而不要在其前面添加local
。您可以使用“匿名”函数语法为其分配函数定义:
spawnEnemy = function()
...
end
实际上,在Lua,all functions are anonymous,因为它们只是价值观。但是,对于调试,使用与函数关联的名称会很有帮助。在堆栈跟踪中,尽可能使用用于调用该函数的变量的名称。