2013-02-21 2 views
0

Я пытаюсь уменьшить star1.movementSpeed = 10000; значение с:повышать стоимость нилъ значение ошибки

local function star1incr() 
    star1.movementSpeed = star1.movementSpeed - 1 
    print("- 1") 
end 

timer.performWithDelay(10000, star1incr, 0) 

Но я получаю эту ошибку: \main.lua:18: attempt to index global 'star1' (a nil value)

Полный код

-- requires 
display.setStatusBar(display.HiddenStatusBar) 
_W = display.contentWidth; --Returns Screen Width 
_H = display.contentHeight; --Returns Screen Height 
local starTable = {} -- Set up star table 
local physics = require "physics" 
physics.start() 

function initStar() 
    local star1 = {} 
    star1.imgpath = "Star1.png"; --Set Image Path for Star 
    star1.movementSpeed = 10000; --Determines the movement speed of star 
    table.insert(starTable, star1); --Insert Star into starTable 
end --END initStar()  


local function star1incr() 
    star1.movementSpeed = star1.movementSpeed - 1 
    print("- 1") 
end 

timer.performWithDelay(10000, star1incr, 0) 

function getRandomStar() 
    local temp = starTable[math.random(1, #starTable)] -- Get a random star from starTable 
    local randomStar = display.newImage(temp.imgpath) -- Set image path for object 

    if (temp.imgpath == "Cloud4.png") then 
    physics.addBody(randomStar, "static", { density=.1, bounce=.1, friction=.2, radius=45 }) 
    end 

    randomStar.myName = "star" -- Set the name of the object to star 
    randomStar.movementSpeed = temp.movementSpeed; -- Set how fast the object will move 
    randomStar.x = math.random(10, _W); 
    randomStar.y = -35; 
    randomStar.rotation = math.random(0,20) -- Rotate the object 
    starMove = transition.to(randomStar, { 
     time=randomStar.movementSpeed, 
     y=500, 
     onComplete = function(self) self.parent:remove(self); self = nil; end 
     }) -- Move the star 
end--END getRandomStar() 

function startGame() 
     starTimer1 = timer.performWithDelay(1000,getRandomStar, 0) 
end--END startGame() 

initStar() 
startGame() 

Как исправить это ?

ответ

1

Вы объявляете star1 как локальный, а затем помещаете его в старую таблицу после прекращения существования функции star1.

Так что вам нужно использовать starTable [1] вместо star1 для первой звезды или передать номер звезды в качестве параметра.

0

Да это работает: D

local function star1incr() 
     starTable[1].movementSpeed = starTable[1].movementSpeed - 1 
     print("- 1") 
    end 
Смежные вопросы