#lua #love2d
#lua #love2d
Вопрос:
Я использую LOVE2D, чтобы немного привыкнуть к lua, и я пытаюсь вызвать функцию, чтобы на экране появился круг, там 5 аргументов, и у меня есть таблица, известная как «кнопка», с требуемыми аргументами в ней. Я хочу использовать table.concat для заполнения всех пустых аргументов, но это мне не позволяет. Есть ли какой-либо способ сделать это?
function toRGB(r,g,b)
return r/255,g/255,b/255
end
function love.load()
button = {}
button.mode = "fill"
button.x = 0
button.y = 0
button.size = 30
end
function love.draw()
love.graphics.setColor(toRGB(60,60,60))
love.graphics.circle(table.concat(button))
end
Ответ №1:
table.concat
возвращает строку. Это не то, что вы хотите.
Чтобы получить список элементов таблицы, используйте table.unpack
. Но эта функция работает только с таблицами, которые имеют последовательные числовые индексы, начинающиеся с 1.
Также love.graphics.circle
доступ к его параметрам осуществляется по позиции, а не по имени. Следовательно, вы должны убедиться, что список выражений, который вы вводите в эту функцию, имеет правильный порядок.
Итак, что-то вроде:
button = {"fill", 0, 0, 30}
love.graphics.circle(table.unpack(button))
сработало бы.
Если вы используете другие ключи таблицы, как в вашем примере, вам придется написать функцию, которая возвращает значения в правильном порядке.
В простейшем случае
button = {}
button.mode = "fill"
button.x = 0
button.y = 0
button.size = 30
button.unpack = function() return button.mode, button.x, button.y, button.size end
love.graphics.circle(button.unpack())
Или вы можете сделать что-то вроде этого:
function drawCircle(params)
love.graphics.circle(params.mode, params.x, params.y, params.size)
end
drawCircle(button)
Есть много других способов добиться этого.