我正在尝试使用 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()
中的 for 循环不起作用,“bubble[key].bubble.pop” 行似乎返回 nil
还有
for 循环我可能可以自己在网上找到解决方案,我的主要问题是“bubble[key].bubble.pop()”行,我不知道哪里出了问题或如何解决它。
谁能帮帮我?
您可能还想看看这个:
泡泡.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
更新后的代码如下
主.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
有什么想法吗?
最佳答案
这段代码有几个问题。首先,在初始化气泡时按数字索引 ( 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)
中使用的任何其他值)。
关于lua - 从lua中另一个表内的表内调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27708763/