love.textinput (Українська)

Доступне починаючи з LÖVE 0.9.0
Ця функція недоступна в попередніх версіях.

Викликається, коли користувач вводить текст. Наприклад, якщо на американській клавіатурі натиснути Shift+2, вводиться текст "@"

Функція

Вигляд

love.textinput( text )

Аргументи

string text
Введений текст в кодуванні UTF-8.

Повертає

Нічого.

Примітки

Хоч в мові Lua є всі можливості для роботи з текстом в кодування UTF-8 в рядках, багато функцій зі стандартної бібліотеки Lua неправильно працюють з UTF-8. Наприклад, #textstring.len(text)) повертає кількість байтів в рядку, а не кількість символів. В вікі з Lua (анг.) та презентації від одного з авторів Lua (анг.) це пояснено детальніше, і даються деякі поради.

Для роботи з текстом в кодуванні UTF-8 (а функція love.textinput отримує саме такий текст) можна використовувати бібліотеку utf8 (англ.).

В Android та iOS ввід тексту звичайно вимкнено. Щов увімкнути його, викличте функцію love.keyboard.setTextInput (англ.).

Приклади

Записати текст від користувача та вивести його на екрані.

function love.load()
    text = "Type away! -- "
end

function love.textinput(t)
    text = text .. t
end

function love.draw()
    love.graphics.printf(text, 0, 0, love.graphics.getWidth())
end

Вивести текст від користувача на екрані з можливістю стерти його клавішею Backspace.

local utf8 = require("utf8")

function love.load()
    text = "Type away! -- "

    -- включити повтори клавіш, щоб можна було утримувати Backspace і
    -- функція love.keypressed викликалася декілька раз
    love.keyboard.setKeyRepeat(true)
end

function love.textinput(t)
    text = text .. t
end

function love.keypressed(key)
    if key == "backspace" then
        -- отримати номер байта, що описує передостанній символ UTF-8 в рядку
        local byteoffset = utf8.offset(text, -1)

        if byteoffset then
            -- видалити останній символ UTF-8.
            -- string.sub працює з байтами, а не з символами UTF-8,
            -- тому string.sub(text, 1, -2) не спрацює.
            text = string.sub(text, 1, byteoffset - 1)
        end
    end
end

function love.draw()
    love.graphics.printf(text, 0, 0, love.graphics.getWidth())
end

Див. також



Іншими мовами