尝试索引全局'前'(零值)

时间:2013-08-31 12:56:38

标签: android indexing lua global corona

我使用Corona SDK在Lua中编码,我收到此错误“在第75行

中尝试索引全局'前'(零值)”

我在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

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

您需要在createScene()中为变量的模块范围添加forward declarations,以便enterScene()可以使用-- 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 。此外,确保在destroyScene中删除所有偶数侦听器。

例如:

{{1}}