lua -> 如何将这些参数修改为 const,或者我应该做什么?

标签 lua love2d

全部!

我来到这里是因为有一个问题困扰了我很长一段时间。我使用love2d引擎作为lua脚本的“图形”补充,但这个问题是lua类型的(至少我相信)。

我有一个功能:

createNew_keepOld = function (oldImgData, oldImgDraw)
    local newImgData = oldImgData --I am assigning old value to another variable
    local newImgDraw = oldImgDraw --I am doing the same thing as with data 

    for x = 0, newImgData:getWidth()-1 do
        for y = 0, newImgData:getHeight()-1 do
            local r, g, b, a = newImgData:getPixel(x, y)
            r = 2*r
            g = 2*g
            b = 0.5*b
            a = 2*a
            newImgData:setPixel(x, y, r, g, b, a)
        end
    end

    newImgDraw:replacePixels(newImgData)

    return newImgData, newImgDraw
end

当这段代码完成时,我得到了我需要的更改,但不是我想要的地方。我只想生成两个新变量来存储数据和图像对象。但是,在此过程中,原始图像发生了变化。

有没有办法声明:

name = function (const param, const param)

    return some_things
end

这样我就可以在不改变原始内容的情况下获得所需的输出?或者我的代码是否存在一些我看不到的问题?

谢谢!

最佳答案

其实这个问题的本质在Love2D和Lua中都有。无论如何。

引自Lua Reference Manual 5.3 :

Tables, functions, threads, and (full) userdata values are objects: variables do not actually contain these values, only references to them. Assignment, parameter passing, and function returns always manipulate references to such values; these operations do not imply any kind of copy.

Love2D 中的大多数类型都是 userdata Lua 类型,因此当将它们传递给你的函数时,你实际上传递了对它们的引用,因此你最终修改了“旧”版本。这些类型通常具有用于复制它们的函数。

ImageData确实有一个并且 Image不会,但您可以执行以下操作:

createNew_keepOld = function (oldImgData, oldImgDraw)
    local newImgData = oldImgData:clone()

    for x = 0, newImgData:getWidth()-1 do
        for y = 0, newImgData:getHeight()-1 do
            local r, g, b, a = newImgData:getPixel(x, y)
            r = 2*r
            g = 2*g
            b = 0.5*b
            a = 2*a
            newImgData:setPixel(x, y, r, g, b, a)
        end
    end

    local newImgDraw = love.graphics.newImage(newImgData, oldImgDraw:getFlags())

    return newImgData, newImgDraw
end

请注意,我根据复制的 ImageData 和旧图像标志创建了全新的 Image

关于lua -> 如何将这些参数修改为 const,或者我应该做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56045849/

相关文章:

c - LuaJit - 从模块/包获取元表并将其分配给用户数据

lua - 为什么Lua默认使用全局变量?

lua - 我如何每n个字符分割一次字符串

oop - 我如何在 lua love2d (OOP) 中使用类

lua - Love2d 和径向重力

lua - 将 lua 函数存储在队列中以便稍后执行

macos - 在 MacOS 上将 Lua 脚本编译为 32 位字节码

lua - 如何获得在 love2d 上工作的增量时间

arrays - 使用 Lua 表作为二维数组

string - 大写函数但用于 LUA 中的非字母字符?