通过迭代创建按钮?

我正在使用 Corona 引擎,尝试通过循环创建多个按钮,而不是显式创建每个单独的按钮。问题是循环只似乎生成一个按钮,这表明它只迭代一次。

以下是我到目前为止得到的东西...

更新

--> 创建等级选择:

local levelSelectionGroup = display.newGroup( );

--> 选择等级:

local function levelSelected()
    print(id);
end

--> 按钮创建:

local function createLevelSelection()
    local levelsToBeMade = 30; -- 先忽略这些随机数。
    local positionX = 1; -- 再次忽略。
    local positionY = 1; -- 再次忽略。

    for buttonNumber=1, levelsToBeMade do
        print(buttonNumber);

        positionX = (positionX + 10); -- 再次忽略。
        positionY = (positionY + 10); -- 再次忽略。

        levelButton[buttonNumber] = widget.newButton{
            id = buttonNumber,
            label = buttonNumber,
            default = "images/levelButton.png",
            over = "images/levelButtonPressed.png",
            width = 50,
            height = 50,
            onRelease = levelSelected
        }

        levelButton[buttonNumber].x = positionX;
        levelButton[buttonNumber].y = positionY;

        levelSelectionGroup:insert(levelButton[buttonNumber]);
    end
end

控制台显示...

尝试索引全局变量 'levelButton'(一个空值)
点赞
用户1005335
用户1005335

你可能需要重新考虑你的算法并更改这个 while 循环。

如果要生成的级别数量将保持不变,则可以使用 for 循环直到达到第 31 个循环。

for i = 1, levelsToBeMade do
    levelsToBeMade = (levelsToBeMade - 1); -- 忽略数字。
    positionX = positionX + 10; -- 忽略数字。
    positionY = postionY + 10; -- 忽略数字。

    levelButton[levelsToBeMade] = widget.newButton{
        id = levelsToBeMade,
        label = levelsToBeMade,
        default = "images/levelButton.png",
        over = "images/levelButtonPressed.png",
        width = 50,
        height = 50,
        onRelease = levelSelected
    }

    levelButton[levelsToBeMade].x = positionX;
    levelButton[levelsToBeMade].y = positionY;
end

希望这可以帮到你。

祝好。

2013-04-11 16:27:36
用户2186639
用户2186639

我想你可能还存在变量或作用域方面的问题。所以请确保levelsToBeMade变量以及positionX和positionY变量都是正确的。如果你十分确信,这段代码应该就能运行:(我并没有在你的代码中发现任何问题,但是我认为使用for循环会更可靠。)

for i=1, levelsToBeMade do

    print( "levelButton+1).." 将被创建。" )

    positionX = positionX + 10; -- 忽略数值。
    positionY = postionY + 10; -- 忽略数值。

    levelButton[#levelButton+1] = widget.newButton{
        id = #levelButton,
        label = #levelButton,
        default = "images/levelButton.png",
        over = "images/levelButtonPressed.png",
        width = 50,
        height = 50,
        onRelease = levelSelected
    }

    levelButton[#levelButton].x = positionX;
    levelButton[#levelButton].y = positionY;
end

如果依然无效,检查一下控制台,看看循环是否执行了指定的次数。

最后的编辑: 哦,我刚刚才注意到。你之前从未创建过levelButton表格!在开始创建级别按钮之前,你应该在循环的外部创建它,就像这样:local levelButton = {}。

2013-04-11 21:29:20
用户1171043
用户1171043

什么是 levelButton,你确定它存在吗?也许应该是 levelButtons

如果没问题的话,请确保 newButton() 返回一个预期的表格:print(levelButton[buttonNumber])

2013-04-13 18:35:44