addEventListner在Lua中无法工作。

这是我代码中相关的函数,我得到了以下错误:

堆栈回溯:

[C]: in function 'error'
?:in function 'getOrCreateTable'
?:in function 'addEventListener'
?:in function 'addEventListener'
main.lua:26: in function 'createPlayScreen'
main.lua:79: in main chunk

我的代码:

-- 设置前向引用
local spawnEnemy
--创建游戏屏幕
local function createPlayScreen()
    local background = display.newImage("SpaceBackground.jpg")
    background.x = centerX
    background.y = -100
    background.alpha = 0
    background:addEventListener ( "tap", shipSmash )

    local planet = display.newImage("Earth.png")
    planet.x = centerX
    planet.y = display.contentHeight+60
    planet.alpha = .2
    planet.xScale = 2
    planet.yScale = 2
    planet:addEventListener ( "tap", shipSmash )

    transition.to(background, {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, xScale = .75, yScale = .75, alpha = 1, y = centerY, onComplete = showTitle})
end

--游戏函数
function spawnEnemy()
    local enemy = display.newImage("asteroid.png")
    enemy.x = math.random(20, display.contentWidth-20)
    enemy.y = math.random(20, display.contentHeight-20)
    enemy.alpha = 0
    transition.to(enemy, {time = 200 , alpha =1})
    enemy:addEventListener ( "tap", shipSmash )

end
local function shipSmash(event)
    local obj = event.target
    display.remove(obj)
    return true
end

createPlayScreen()
startGame()

这个问题是什么?

点赞
用户1442917
用户1442917

你在 addEventListener 调用中引用了本地函数 shipSmash (enemy:addEventListener("tap", shipSmash)),但是在代码运行到此处时该函数尚未被定义。你需要将 shipSmash 函数的定义移到你希望使用它的函数之前。

如果你在代码中运行一个静态代码分析器(例如 lua-inspectZeroBrane Studio 或者 这个列表 中的其他工具),你会看到类似以下两个警告的提示,它们应该能够让你意识到该函数的引用存在问题:

file.lua:6: first use of unknown global variable 'shipSmash'
file.lua:41: unused local function 'shipSmash'
2015-03-20 19:11:26