【发布时间】:2015-02-26 19:31:39
【问题描述】:
我正在尝试使用 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.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: 尝试索引一个 nil 值
更新的代码如下
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
有什么想法吗?
【问题讨论】:
-
love.keypressed的参数是字符串还是数字?键[1]是第一。字符串"1"不会加载该索引1处的值。您需要tonumber进行转换或类似操作。此外,您的bubble.pop函数将popped设置在全局bubble表上,而不是在任何特定的气泡“对象”上。同样,bubble.draw在全局bubble表上运行,而不是在气泡“对象”上运行。 -
bubble.load不返回任何值,因此您没有在表中存储任何内容。此外,您似乎没有正确使用 OO,因为您没有创建不同的气泡实例;您只是将所有内容存储在完全相同的实例中,这是行不通的。 -
如何创建一个新的气泡实例?我应该从bubble.load 中返回什么气泡表?