【问题标题】:Lua/LOVE indexing problemsLua/LOVE 索引问题
【发布时间】:2013-09-17 00:57:54
【问题描述】:

每当我对数组进行这样的任何事情时,都会遇到一个非常恼人的错误。我有在 love.load() 函数中设置数组的代码:

function iceToolsInit()
    objectArray = {} --for object handling
    objectArrayLocation = 0
end

然后是允许创建对象的代码。它基本上抓取了关于所述对象的所有信息并将其插入到一个数组中。

function createObject(x, y, renderimage) --used in the load function
    --objectArray is set up in the init function
    objectArrayLocation = objectArrayLocation + 1
    objectArray[objectArrayLocation] = {}
    objectArray[objectArrayLocation]["X"] = x
    objectArray[objectArrayLocation]["Y"] = y
    objectArray[objectArrayLocation]["renderimage"] = 
        love.graphics.newImage(renderimage)
end

在此之后,更新函数会读取 objectArray 并相应地渲染图像:

function refreshObjects() --made for the update function
    arrayLength = #objectArray
    arraySearch = 0
    while arraySearch <= arrayLength do
        arraySearch = arraySearch + 1
        renderX = objectArray[arraySearch]["X"]
        renderY = objectArray[arraySearch]["Y"]
        renderimage = objectArray[arraySearch]["renderimage"]
        if movingLeft == true then --rotation for rightfacing images
            renderRotation = 120
        else
            renderRotation = 0
        end
        love.graphics.draw(renderimage, renderX, renderY, renderRotation)
    end
end

我当然剪掉了一些不需要的代码(只是数组中的额外参数,例如宽度和高度),但你明白了要点。当我设置这段代码来制作一个对象并渲染它时,我得到了这个错误:

attempt to index '?' (a nil value)

它指向的线就是这条线:

renderX = objectArray[arraySearch]["X"]

有谁知道这里出了什么问题,以及我将来如何防止它?我真的需要这方面的帮助。

【问题讨论】:

    标签: arrays indexing lua love2d


    【解决方案1】:

    这是一个错误:

    arraySearch = 0
    while arraySearch <= arrayLength do
        arraySearch = arraySearch + 1
    

    您通过循环arrayLength+1 运行次数,通过索引1..arrayLength+1。您只想通过索引1..arrayLength 循环arrayLength 次数。解决方法是将条件改为arraySearch &lt; arrayLength

    另一种(更 Lua 的方式)是这样写:

    for arraySearch = 1, #objectArray do
    

    更 Lua 的方式是使用 ipairstable.field 引用而不是 (table["field"]):

    function refreshObjects()
      for _, el in ipairs(objectArray) do
        love.graphics.draw(el.renderimage, el.X, el.Y, movingLeft and 120 or 0)
      end
    end
    

    objectArraymovingLeft 应该作为参数传递...

    【讨论】:

      猜你喜欢
      • 2020-09-24
      • 2016-12-15
      • 1970-01-01
      • 2015-06-06
      • 1970-01-01
      • 2020-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多