我使用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
答案 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}}