簡體   English   中英

Corona SDK(LUA) - 嘗試調用upvalue'spawnEnemy'(零值)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM