love.textinput (Русский)

Available since LÖVE 0.9.0
This function is not supported in earlier versions.

Функция вызывается при наборе текста пользователем. К примеру при нажатии shift-2 на Американской раскладке клавиатуры эта функция вызовется с параметром "@".

Функция

Вид

love.textinput( text )

Аргументы

string (Русский) text
Текст в UTF-8.

Возвращает

Ничего.

Примечания

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

Библиотека utf8 (Русский) используется для взаимодействия с строкой закодированной в UTF-8 (такой как строка полученная в функции love.textinput)

В Android и, textinput по умолчанию выключен; вызовите 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.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

Смотрите также


Другие языки