gpt4 book ai didi

lua - 如何在 love2d 中创建文本框

转载 作者:行者123 更新时间:2023-12-04 22:32:20 24 4
gpt4 key购买 nike

我一直在尝试为用户制作一个框,以便在用户单击该框后输入数据。到目前为止,这是我所拥有的,但是单击该框不会导致向其中添加文本输入。问题出在哪里?

function love.load ()
txt1 = ""

columnx = { 50, 160, 260, 375, 495, 600, 710 }
columny = { 130, 230, 330, 440, 540, 640 }


if show1 == true then
function love.textinput(t)
txt1 = t
end
end
end

function love.mousepressed (x, y)
if
x >= columnx[4] and
x <= 435 and
y >= columny[1] and
y >= 145 then
show1 = true
end
end

function love.draw ()
love.graphics.print(txt1, columnx[4], columny[1])
end

最佳答案

你已经快要上路了,但我会给你一些关于如何创建基本文本框的提示。

首先,将概念性的 文本框 视为一个单独的表格,其中包含正确更新和呈现所需的有关自身的所有信息。对独立的事物进行推理要容易得多。

文本框需要知道它的位置、大小、是否处于事件状态以及它包含哪些文本。我们可以将其压缩成如下所示的表格。

local textbox = {
x = 40,
y = 40,
width = 400,
height = 200,
text = '',
active = false,
colors = {
background = { 255, 255, 255, 255 },
text = { 40, 40, 40, 255 }
}
}

(我们还存储了一些颜色信息。)

之后添加文本的简单方法是通过 love.textinput ,如您所见。在您的代码中,我们仅在 love.load 中检查文本框是否处于事件状态一次,当然不是,因为我们可能还没有接受任何用户输入。我们没有尝试重载该函数,而是简单地检查文本框在处理程序中是否处于事件状态,然后进行相应处理。

function love.textinput (text)
if textbox.active then
textbox.text = textbox.text .. text
end
end

我们已经介绍了如何检查用户是否在问题的矩形区域内单击:Love2d cursor positions .如果文本框当前处于事件状态并且用户点击了其空间,我们希望停用该文本框。

function love.mousepressed (x, y)
if
x >= textbox.x and
x <= textbox.x + textbox.width and
y >= textbox.y and
y <= textbox.y + textbox.height
then
textbox.active = true
elseif textbox.active then
textbox.active = false
end
end

最后我们需要渲染我们的文本框。我们使用 unpack扩展我们的颜色表,以及love.graphics.printf确保我们的文本在文本框的空间内换行。

function love.draw ()
love.graphics.setColor(unpack(textbox.colors.background))
love.graphics.rectangle('fill',
textbox.x, textbox.y,
textbox.width, textbox.height)

love.graphics.setColor(unpack(textbox.colors.text))
love.graphics.printf(textbox.text,
textbox.x, textbox.y,
textbox.width, 'left')
end

这些是创建非常粗糙的文本框的基本思路。这并不完美。请注意,当文本的高度比我们最初设置的文本框高度更长时,您需要考虑会发生什么情况,因为这两者只是松散相关。


为了使您的程序更易于阅读和扩展,您在上面看到的所有内容都应该真正放入它们自己的处理文本框表格的函数中,而不是将 love 处理程序与通用代码。看看第 16 章 Programming in Lua , 其中包括 Object-Oriented Programming - 游戏开发的普遍重要主题。


参见 love.textinput有关如何处理退格键以删除字符的页面。


一些额外的事情要考虑:

  • 我们如何区分事件文本框和非事件文本框?
  • 我们如何创建一个文本框列表,以便我们可以在屏幕上显示多个(但只有一个处于事件状态)?

关于lua - 如何在 love2d 中创建文本框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40756230/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com