Lua. Attempt to index global "a" (a nil value)

我遇到了以下错误:

尝试对全局变量 "a" 索引(一个空值)

   local gfx = love.graphics
    return{
        new = function( Image, Animation, Time)
        return{
        current_frame = 1,
        current_anim = 1,
        image = Image,
        a = Animation,
        play = false,
        time = Time or 0,2,
        counter = 0,

        update = function(dt)
        if play then
                    counter = counter + dt
                    if counter >= time then
                        counter = 0
                        current_frame = current_frame + 1
                    end

                    if current_frame > #a[current_anim] then
                        current_frame = 1
                    end
                else

                end
        end,

        play = function()
        play = true
        end,

        stop = function()
        play = false
        end,

        set_animation = function(anim)
        if anim > #a then error("没有此动画", anim) return end
        current_anim = anim

        end,

        draw = function(data)
        gfx.draw(image, a[current_anim][current_frame], data[1], data[2])
        end

        }
        end
    }

看起来,我已经给了变量 "a" 一个值 - 一个包含一组图像的表,我是通过第二个参数赋值的。

    -----

    local quad = love.graphics.newQuad
    local anim_data = {
      quad(0,0, 32, 48, 192, 256),
      quad(32,0, 32, 48, 192, 256),
      quad(64,0, 32, 48, 192, 256),
      quad(96,0, 32, 48, 192, 256),
      quad(129,0, 32, 48, 192, 256),
      quad(162,0, 32, 48, 192, 256)

    }
    local image = love.graphics.newImage("images/player_animation.png")
    image:setFilter("nearest","nearest")

这里我假设给 'a' 赋了一个值

    animation = require("animations"):new(
            image,

            {
              { -- 空闲
                anim_data[1]
              },
              { -- 行走
                anim_data[2],
                anim_data[3],
                anim_data[4],
                anim_data[5],
                anim_data[6]
              },
            },

            0.2
          )

    animation.play()
点赞
用户2505965
用户2505965

你正在寻找的 a 是从 new 函数返回的表的一部分。 它在这些函数的范围之外不可见。

简单 的解决方案是将你放在表中的值移动到 new 函数的范围内,封装它们。 然而,这将它们从表中删除,因此它们在 new.play.pause.draw.update.set_animation 函数之外不可见。

更好的解决方案是采用更典型的 OOP 解决方案,因此我建议阅读《Lua编程》第16章:面向对象编程。 阅读完该章节后,最好再阅读其他所有章节(特别是第5、6和11章)。

local gfx = love.graphics

return {
    new = function (Image, Animation, Time)
        local current_frame = 1
        local current_anim = 1
        local image = Image
        local a = Animation
        local play = false
        local time = Time or 0.2
        local counter = 0

        return {
            update = function (dt)
                if play then
                    counter = counter + dt
                    if counter >= time then
                        counter = 0
                        current_frame = current_frame + 1
                    end

                    if current_frame > #a[current_anim] then
                        current_frame = 1
                    end
                end
            end,

            play = function ()
                play = true
            end,

            stop = function ()
                play = false
            end,

            set_animation = function (anim)
                if anim > #a then
                    error("there is no animation " .. anim)
                    return
                end
                current_anim = anim
            end,

            draw = function (data)
                gfx.draw(image, a[current_anim][current_frame], data[1], data[2])
            end
        }
    end
}
2016-07-10 18:48:41