Lua 从';在卢阿的另一张桌子里

Lua 从';在卢阿的另一张桌子里,lua,lua-table,love2d,Lua,Lua Table,Love2d,我正在尝试使用love2D构建我的第一个游戏,我遇到了一个问题 这个游戏是一个泡泡弹出游戏,我想给键盘上的每个字母分配一个泡泡,这样当按下一个字母时,泡泡就会弹出 我有一个名为“bubble.lua”的外部文件,我试图用它创建一个对象“bubble”。 为此,我在bubble.lua中创建了一个表“bubble”,其中包含函数和变量。现在,当使用一个气泡从main.lua调用该文件时,该文件可以工作,但是我需要26个气泡,所以我认为最好将每个气泡存储在另一个表中。为了尝试这个,我只存储了一个泡泡

我正在尝试使用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()”行,我无法找出哪里出了问题或如何修复它

有人能帮我吗

您可能还想看看这个:

泡泡,卢阿

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:尝试索引nil值

更新代码如下

梅因·卢阿

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]
)时,您可以按数字进行索引,但使用
键作为索引(
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)
中的
key
使用的任何其他值),而不是
bubbles[1]

love.keypressed
的参数是字符串还是数字?键
[1]
是第一个。字符串
“1”
不会加载该索引
1
处的值。您需要
tonumber
进行转换或类似操作。另外,您的
bubble.pop
函数正在全局
bubble
表上设置
popped
,而不是在任何特定的bubble“对象”上。类似地,
bubble.draw
在全局
bubble
表上运行,而不是在bubble“对象”上运行。
bubble.load
不会返回任何值,因此您不会在表中存储任何内容。此外,您似乎没有正确地使用OO,因为您没有创建不同的气泡实例;您只是将所有内容存储在完全相同的实例中,这是行不通的。如何创建bubble的新实例?我应该如何从bubble.load返回bubble表?阅读上的章节,应该会有所帮助。谢谢,我想知道你是否知道一种方法,我可以有问题地为每个字母指定一个bubble?不要做“bubbles['a']=bubble.load()bubbles['b']=bubble.load()”等操作。你可以对k=string.ord('a')、string.ord('z')做类似于
的操作,比如做bubbles[string.char(k)]=bubble.load()end
。我在“bubbles[key].pop()”处收到一个“尝试索引一个nil值”错误,我刚刚检查了调试器,并且
love中
key
的值。按下
a
时,按下的
key
a
。问题出在其他地方。@jamiemcalister,您的bubble.load不会返回任何值,因此您不会在表中存储任何内容。