2012-07-13 96 views
-1

我刚刚开始学习corona和lua,我的第一个项目是制作一个小骰子游戏,并且我刚开始学习!继承人的骰子对象...corona sdk。刚刚开始使用corona和lua,并想知道课程/实例

--declare table + metatable 

    local dice = {} 

    local dice_mt = {__index = dice} 


    --CONSTRUCTOR 

    function dice.new(ypos, xpos) 

    local newdice = {xpos = xpos, ypos = ypos,dicetext = display.newText("X", 50*xpos , 50*ypos , nil, 50)} 

    --dicetext = display.newText(facevalue, 50*xpos , 50*ypos , nil, 50) 

    return setmetatable(newdice, dice_mt) 
    end 

    --rolldice function 

    function dice:rolldice() 

    self.dicetext.text = math.random(0,6) 

    end 

    return dice 

游戏有25个骰子可以推出(以上rolldice功能) 我的继承人main.lua

display.setStatusBar(display.HiddenStatusBar) 

    local diceclass = require ("dice") 

    for i = 1, 5, 1 do 

    local die = diceclass.new(i,i) 

    i = i+1 

    end 

    die:rolldice() 

我是一个网格试图以编程方式生成骰子网格(atm我只是在对角线上生成5个骰子(只是文本)。这很好,但我的问题是运行rolldice函数。它只适用于1个骰子,但不是在那里时是更多 我猜测问题是我有这个类的所有这些实例具有相同的名称..有没有办法让他们不同以编程方式租用名称,因为我在我的for循环中创建它们?或者有更好的方法来做到这一点?谢谢!

回答

0

local变量是如此命名的,因为它们是本地到它们被定义的范围。 diefor循环内定义。因此,一旦您离开for循环,它就会停止。

如果你想创建die对象的数组,你需要创建一个数组,这是访问的循环,那么die对象添加到这个阵列。

另外,i = i+1会适得其反,因为Lua知道如何增加循环本身。此外,它可能导致未定义的行为。