所以我用Love2D制作游戏,我收到以下错误:
maps/map_one.lua:249: attempt to index field 'player' (a nil value)
Traceback
maps/map_one.lua:249: in function 'updateWorld'
main.lua:53: in function 'update'
所以,当我看一下我的player
,
function love.load()
....
objects = {}
objects.player = {} --obviously not nil
objects.player.body = love.physics.newBody(world, 32, 32, "dynamic")
...
end
并且错误在哪里,
function updateWorld(dt)
world:update(dt) --calculates physics and whatnot
....
--line with error
camera:setPosition(objects.player.body:getX() - (love.graphics.getWidth() / 2),
objects.player.body:getY() - (love.graphics.getHeight() / 2))
end
然后我看了main.lua
require("maps.map_one") --file with error
....
function love.update(dt)
updateWorld(dt) --updateWorld() in map_one.lua
end
我看不出任何错误。
如果有帮助,我正在使用Love2D v.9.0.0以及任何版本的Lua附带它(独立)。
答案 0 :(得分:1)
objects.player
最初不是nil,但在某些update()期间它是nil所以有些东西是nilling它。我从来没有使用过Love2D,但是love.update(dt)
需要一个时间步,所以假设在每个时间帧调用此函数,你可以尝试打印objects.player
并查看它何时变为零:
function love.update(dt)
print("objects.player:", objects.player)
updateWorld(dt) --updateWorld() in map_one.lua
end
如果你看到objects.player
不是nil的某些打印,那么它就变为nil,你知道其他一些更新函数(可能是一个事件处理程序)正在对它做一些事情。如果在第一次更新时它是零,则可能代码在初始化期间执行某些操作,在love.load()
中列出的行之后。你应该在该函数的末尾print("objects.player:", objects.player)
,只是为了确保它在返回时不是nil。