【问题标题】:Corona SDK(LUA) - attempt to call upvalue 'spawnEnemy'(a nil value)Corona SDK(LUA) - 尝试调用 upvalue 'spawnEnemy'(一个 nil 值)
【发布时间】:2013-08-10 18:13:33
【问题描述】:

我只是想将 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 )

【问题讨论】:

    标签: lua coronasdk


    【解决方案1】:

    local function spawnEnemy() 更改为function spawnEnemy(),因为该变量之前已经声明过。是的,对于初学者来说,这是典型的 Lua 陷阱。

    【讨论】:

    • 谢谢,这对我有帮助。试着记住这个。
    【解决方案2】:

    您已将spawnEnemy 声明为局部变量两次。这是允许的(第二个隐藏第一个,第二个在范围内),但这不是你想要的。

    您已正确声明了一个局部变量并在showTitle 中捕获了它。稍后要设置相同的变量,请使用赋值语句,但不要在其前面加上 local。您可以使用“匿名”函数语法为其分配函数定义:

    spawnEnemy = function() 
       ...
    end 
    

    实际上,在 Lua 中,all functions are anonymous 因为它们只是值。但是,对于调试而言,将名称与函数关联起来会很有帮助。在堆栈跟踪中,尽可能使用用于调用函数的变量的名称。

    【讨论】:

      猜你喜欢
      • 2019-10-10
      • 1970-01-01
      • 2017-04-03
      • 2019-09-15
      • 1970-01-01
      • 2018-07-11
      • 2014-05-06
      • 2013-06-06
      • 2014-03-13
      相关资源
      最近更新 更多