你幾乎在路上,但我會給你一些關於如何創建基本文本框的提示。
首先,將一個概念文本框設置爲一個單一表格,其中包含需要了解其自身以正確更新和呈現的所有信息。推理自我包容的東西要容易得多。
文本框需要知道它的位置,大小,它是否處於活動狀態以及它包含哪些文本。我們可以將它壓縮成如下所示的表格。
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
處理程序。看一看Programming in Lua的第16章,其中涵蓋Object-Oriented Programming--遊戲開發的一個重要主題。
請參閱love.textinput
關於如何處理退格,刪除字符的頁面。
一些額外的事情要考慮:
- 我們怎樣才能從無效區分一個積極的文本框?
- 我們如何創建一個文本框列表,所以我們可以在屏幕上有多個(但只有一個活動)?
謝謝這有助於很多。 – laquishabonquiquithe3rd
每件事看起來都是正確的,並且有道理,但每當我點擊框並嘗試輸入一個字母/數字,它都不起作用。我也沒有其他的錯誤。 – laquishabonquiquithe3rd
@ laquishabonquiquithe3rd您可以創建一個完整的,但最小的'main.lua'文件,並將其託管在https://gist.github.com之類的位置,以便我可以看一下嗎? 'love.textinput'應該像廣告一樣工作。你正在使用哪個版本的愛? – Oka