2

コロナ SDK を使用して Lua でコーディングしていますが、 75 行目に「グローバル 'front' (nil 値) のインデックスを作成しようとしています」というエラーが表示されます。

main.lua からリダイレクトされた game.lua でこれを行っています (この部分は正常に動作します) ... リンクは pastebin です。

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

これはおそらく、変数の初期化に失敗したためです。

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

イメージ ファイルが と同じディレクトリgame.luaにあり、ファイル名のスペルが正しいことを確認してください。

于 2013-08-31T14:00:41.093 に答える
0

で変数を使用できるように、モジュールのスコープで変数の前方宣言を追加する必要があります。また、destroyScene を実行するときは、偶数リスナーをすべて削除してください。createScene()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
于 2013-09-02T11:17:03.230 に答える