在Lua中从一个嵌套的表中调用另一个嵌套表内的函数。

我正在尝试使用love2D构建我的第一个游戏,但我遇到了一个问题。

这个游戏是一个气泡爆破游戏,我希望将键盘上的每个字母分配给一个气泡,以便按下一个字母时,气泡会爆炸。

我有一个名为“bubble.lua”的外部文件,我试图在其中创建一个名为“bubble”的对象。 为此,我在bubble.lua中创建了一个包含函数和变量的表“bubble”。现在,当使用一个气泡从main.lua调用此文件时,此文件有效,但是我将需要26个气泡,因此我认为最好将每个气泡存储在另一个表中。出于尝试这一目的,我只存储了一个气泡,使用1作为键。这是我的问题所在。

require "bubble"
local bubbles = {}
function love.load()
    bubbles[1] = bubble.load(100, 100)
end
function love.draw()
    for bubble in bubbles do
        bubble.draw()
    end
end

function love.keypressed(key)
    bubbles[key].bubble.pop()
end

首先,我知道“love.draw()”中的循环不起作用,“bubble [key]。bubble.pop”这一行似乎也返回“nil”。

我可能可以在网上找到for循环的解决方案,我的主要问题是“bubble [key]。bubble.pop()”行,我无法弄清楚出了什么问题或如何解决它。

有人能帮帮我吗?

您可能也想查看:

bubble.lua

bubble = {}
function bubble.load(posX, posY)
    bubble.x = posX
    bubble.y = posY
    bubble.popped = false
end

function bubble.draw()

    if not bubble.popped then
        love.graphics.rectangle("line", bubble.x, bubble.y, 37, 37)
    else
        love.graphics.rectangle("line", bubble.x, bubble.y, 37, 100)
    end
end

function bubble.pop()
    bubble.popped = true
end

##编辑:

根据下面回答的建议,当我按下“a”时,现在出现以下错误:

main.lua:14: attempt to index a nil value

以下是更新后的代码:

main.lua

require "bubble"
local bubbles = {}
function love.load()
    bubbles["a"] = bubble.load(100, 100)
end
function love.draw()
    for key, bubble in pairs(bubbles) do
       bubble.draw()
    end
end

function love.keypressed(key)
    bubbles[key].pop()
end

有什么想法吗?

点赞
用户1442917
用户1442917

这段代码存在一些问题。首先,当你初始化bubblesbubbles[1])时,你通过数字进行索引,但是在访问它们时却使用了key作为索引(bubbles[key]),而key并不是数字。你需要选择一种机制来索引bubbles。假设你选择了key作为索引(而不是数字)。

这个循环:

for bubble in bubbles do
    bubble.draw()
end

应该改写为:

for key, bubble in pairs(bubbles) do
    bubble.draw()
end

而不是bubbles[key].bubble.pop(),你可以简单地做bubbles[key].pop(),因为bubbles[key]已经返回了你可以弹出的气泡。

要初始化,你需要使用bubbles['a'](或其他在love.keypressed(key)中使用的值)代替bubbles[1]

2014-12-30 17:13:52