2013-08-31 2 views
2

Я кодирование в Lua с Corona SDK, и я получаю эту ошибку «Попытку индекса глобальной„перед“(нилъ значения)» в Line 75Попытка индекса глобального «фронт» (нилъ значения)

Я делаю это в game.lua, перенаправляется с main.lua (эта часть работает нормально) .... Ссылка на паста, потому что 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 
+1

Попробуйте сделать ваши переменные (спереди, фронтальный1 и т.д.) глобальные, как вы к ним доступ из двух различных функций. –

+0

СПАСИБО, МАСТЕР! Я сделал их глобальными, и теперь это прекрасно! – user2735374

ответ

0

Скорее всего, это связано с тем, что переменная не удалось инициализировать.

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

Убедитесь, что файл находится в том же каталоге, game.lua, и имя файла написано правильно.

0

Необходимо добавить forward declarations в область действия модуля для ваших переменных в createScene(), чтобы они были доступны для enterScene(). Кроме того, обязательно удалите всех ваших ровных слушателей, когда вы уничтожаетеScene.

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