2

我正在使用 Corona SDK 在 Lua 中编码,我在第 75 行收到此错误“尝试索引全局'front'(一个 nil 值)”

我在 game.lua 中执行此操作,从 main.lua 重定向(这部分工作正常)....链接到 pastebin,因为 stackoverflow 弄乱了代码!

--requires
local storyboard = require "storyboard"
local scene = storyboard.newScene()

local physics = require "physics"
physics.start()


function scene:createScene(event)
    local screenGroup = self.view

    local bkg = display.newImage("bkg.png")

    local back = display.newImage("back.png")
    back.y=450
    back.speed = 1
    back:setReferencePoint(display.BottomLeftReferencePoint)

    local back1 = display.newImage("back.png")
    back1.y=450
    back1.x=2400
    back1.speed = 1
    back1:setReferencePoint(display.BottomLeftReferencePoint)

    local front = display.newImage("front1.png")
    front.y=470
    front.speed = 4
    front:setReferencePoint(display.BottomLeftReferencePoint)

    local front1 = display.newImage("front1.png")
    front1.y=470
    front1.x=2400
    front1.speed = 4
    front1:setReferencePoint(display.BottomLeftReferencePoint)

    local bird = display.newImage("bird.png")
    bird.y = 285; bird.x= 200
    physics.addBody(bird, "dynamic", 
                    {density=0.1, bounce=0.1, friction=0.2, radius=10})
end

function scrollHill(self,event)
    if self.x < -1800 then
        self.x = 1400 - self.speed * 2
    else
        self.x = self.x - self.speed
    end
end

function activateBird(self,event)
    self:applyForce(0, -1.5, self.x, self.y)
end

function touchScreen(event)
   print("touch_ok")
   if event.phase =="began" then
    bird.enterFrame = activateBird
    Runtime:addEventListener("enterFrame", bird)
   end

    if event.phase =="ended" then
    Runtime:removeEventListener("enterFrame", bird)
   end
end


function scene:enterScene(event)
    Runtime:addEventListener("touch", touchScreen)

    front.enterFrame = scrollHill
    Runtime:addEventListener("enterFrame", front)

    front1.enterFrame = scrollHill
    Runtime:addEventListener("enterFrame", front1)

    back.enterFrame = scrollHill
    Runtime:addEventListener("enterFrame", back)

    back1.enterFrame = scrollHill
    Runtime:addEventListener("enterFrame", back1)
end

function scene:exitScene(event)
end

function scene:destroyScene(event)
end

scene:addEventListener("createScene", scene)
scene:addEventListener("enterScene", scene)
scene:addEventListener("exitScene", scene)
scene:addEventListener("destroyScene", scene)

return scene
4

2 回答 2

0

You need to add forward declarations at the module's scope for your variables in createScene() so they are available to enterScene(). Also, be sure to remove all your even listeners when you destroyScene.

Ex:

-- Use a forward declaration here so `front` 
-- is in the module's scope
local front

function scene:createScene(event)
    -- ...
    -- Don't use `local` here because `front` was defined
    -- above.
    front = display.newImage("front1.png")
    front.y=470
    front.speed = 4
    front:setReferencePoint(display.BottomLeftReferencePoint)
    -- ...
end

function scene:enterScene(event)
    -- ...
    -- Since `front` is in the parent's scope, 
    -- we can access it here
    Runtime:addEventListener("enterFrame", front)
    -- ...
end

function scene:destroyScene(event)
    -- Be sure to remove your listeners here
    Runtime:removeEventListener("enterFrame", front)
end
于 2013-09-02T11:17:03.230 回答
0

这很可能是因为变量未能初始化。

local front = display.newImage("front1.png")

确保图像文件与 位于同一目录中game.lua,并且文件名拼写正确。

于 2013-08-31T14:00:41.093 回答