我如何使用函数更改全局变量?

问题描述 投票:0回答:1

我正在尝试正确绘制复选框,但我想使其成为一个函数

function drawCheckBox(x, y, distance, title, variable)

local mousePos = input:get_mouse_pos()
local checkBoxColor

local checkSize = 15;

if (mousePos.x > x and mousePos.x < x + checkSize) and (mousePos.y > y and mousePos.y < y + checkSize)  then
    if input:is_key_down( 0x1 ) then
        variable = not variable
    end
end

if variable == true then
    checkBoxColor = colors.white
else
    checkBoxColor = colors.red
end

render:rect_filled( x, y, checkSize, checkSize, checkBoxColor)
render:text( font, x + distance, y, title, colors.white )

end

可以这样称呼,我在函数中有一个全局变量作为“ variable”,以便可以引用复选框的布尔值

drawCheckBox(100, 100, 50, 'Test One', checkboxVars.testOne)

但是问题是当我按下复选框时,它不会更改全局

lua
1个回答
0
投票
根据this,简单的数据类型在lua中作为值而不是作为引用传递,因此,局部上下文中的variable是全局变量的

copy。更改副本不会影响原始变量。


不过,表作为引用传递,因此您可以调用:

drawCheckBox(100, 100, 50, 'Test One', checkboxVars)

在本地范围内具有:

variable.testOne = not variable.testOne

if variable.testOne == true then
    checkBoxColor = colors.white
else
    checkBoxColor = colors.red
end
当然,如果这符合您的情况。
© www.soinside.com 2019 - 2024. All rights reserved.