将空值(nil)升值错误(Upvalue a nil value error)

我试图通过以下代码降低star1.movementSpeed = 10000;的值:

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

timer.performWithDelay(10000, star1incr, 0)

但是我得到了这个错误:\main.lua:18:尝试索引全局'star1'(值为nil)

完整代码

 - 需要
display.setStatusBar(显示。HiddenStatusBar)
_W = display.contentWidth;  - 返回屏幕宽度
_H = display.contentHeight; - 返回屏幕高度
local starTable = {}  - 设置星表
local physics = require“physics”
物理。开始()

函数initStar()
    local star1 = {}
    star1.imgpath =“Star1.png”; - 设置星的图像路径
    star1.movementSpeed = 10000; - 确定星的移动速度
    table.insert(starTable,star1); - 将星插入starTable
end  - 结束initStar()

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

计时器。执行带延迟的函数(10000,star1incr,0)

function getRandomStar()
    local temp = starTable [math.random(1,#starTable)] - 从starTable获取随机星
    local randomStar = display.newImage(temp.imgpath) - 为对象设置图像路径

    if(temp.imgpath ==“Cloud4.png”)then
        physics.addBody(randomStar,“static”,{density =。1,bounce =。1,friction =。2,radius = 45})
    结束

    randomStar.myName =“star” - 将对象的名称设置为star
    randomStar.movementSpeed = temp.movementSpeed; - 设置对象移动的速度
    randomStar.x = math.random(10,_W);
    randomStar.y = -35;
    randomStar.rotation = math.random(0,20) - 旋转对象
    starMove = transition.to(randomStar,{
        时间= randomStar.movementSpeed,
        y = 500,
        onComplete = function(self)self.parent:remove(self); self = nil; end
        })-移动星
end  - 结束getRandomStar()

函数startGame()
    starTimer1 =计时器。延迟执行(1000,getRandomStar,0)
end  - 结束startGame()

initStar()
startGame()

我该怎么解决这个问题?

点赞
用户438753
用户438753

你将 star1 声明为局部变量,然后在函数结束时将其放入 startable 表中。一旦 star1 停止存在,你需要使用 starTable[1] 而不是 star1 来表示第一个星,或者将星星编号作为参数传入。

2013-02-21 13:18:59
用户1993254
用户1993254
本地函数 star1incr()

starTable[1].movementSpeed = starTable[1].movementSpeed - 1
print("- 1")

结束

这个有效: D

2013-02-21 13:44:26