从lua中另一个表内的表内调用函数

时间:2014-12-30 16:14:24

标签: lua lua-table love2d

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

游戏是一个泡泡弹出游戏,我想为键盘上的每个字母指定一个气泡,这样当按下一个字母时,气泡就会弹出。

我有一个名为“bubble.lua”的外部文件,我试图将对象“冒泡”。 要做到这一点,我在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()中的for循环不起作用,而“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:尝试索引零值

更新的代码位于

之下

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

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

此代码存在几个问题。首先,在初始化气泡(bubbles[1])时按数字进行索引,但使用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[1](或bubbles['a']key使用的任何其他值),而不是love.keypressed(key)