0

所以我正在用 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. 0.9.0 和 Lua 附带的任何版本(独立)。

4

1 回答 1

1

objects.player最初不是 nil ,但在某些 update() 期间它是 nil ,所以有些东西正在消除它。我从未使用过 Love2D,但love.update(dt)需要一个时间步长,因此假设在每个时间帧都调用此函数,您可以尝试打印objects.player并查看它何时变为 nil:

function love.update(dt)
    print("objects.player:", objects.player)
    updateWorld(dt) --updateWorld() in map_one.lua
end

如果你看到一些objects.player不是 nil 的打印,那么它就变成了 nil,你知道其他一些更新函数(可能是一个事件处理程序)正在对它做一些事情。如果即使在第一次更新时它也是 nil ,那么代码在初始化期间可能正在执行某些操作,在love.load(). 您可能也应该print("objects.player:", objects.player)在该函数的末尾,以确保它在返回时不为零。

于 2014-03-15T16:11:06.507 回答