电晕sdk。刚开始使用电晕和lua,并想知道类/实例

时间:2012-07-13 20:46:57

标签: oop class lua instantiation 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循环中创建它们时,有没有办法以编程方式为它们提供不同的名称?或者有更好的方法吗?谢谢!

1 个答案:

答案 0 :(得分:0)

local变量之所以如此命名是因为它们是 local 到它们所定义的范围。 diefor循环中定义。因此,一旦离开for循环,它就会停止存在。

如果要创建die个对象的数组,则需要创建一个可在循环外部访问的数组,然后将die个对象添加到此阵列。

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