love.textinput (Français)

Disponible depuis LÖVE 0.9.0
Ce-tte function n'est pas supporté-e par des versions plus anciennes.

Appelée lorsque un texte à été saisi par l'utilisateur. Par exemple si majuscule-2 est pressé sur une disposition de clavier américain, le texte « @ » sera généré.

Fonction

Synopsis

love.textinput( text )

Arguments

string (Français) text
Le texte encodé en Unicode UTF-.

Retourne

Rien.

Notes

Bien que les chaînes de caractère de Lua peuvent parfaitement utiliser du texte unicode encodé en UTF-8, différentes fonctions de la bibliothèque « string » (chaînes de caractères) de Lua ne traiterons pas le texte comme vous pourriez le prévoir. Par exemple, #text (et string.len(text)) retourne le nombre d'octets de la chaîne caractère, plutôt que le nombre de caractères unicode. Le wiki de Lua et une présentation d'un des créateurs de Lua (en anglais) donne des explications plus en profondeur, et quelques astuces.

La bibliothèque utf8 peut être utilisée pour travailler sur du texte unicode encodé en UTF-8 (tel que les arguments de texte fournis à cette fonction.)

Sur Android et iOS, textinput est désactivé par défaut ; il faut appeler love.keyboard.setTextInput pour l'activer.

Exemples

Enregistre et affiche le texte que l'utilisateur écrit.

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

Affiche le texte que l'utilisateur écrit, et efface le texte lorsque la touche effacer est pressée.

local utf8 = require("utf8")
 
function love.load()
    text = "Saisissez du texte ! -- "
 
    -- Active la répétition des touches afin que la touche efface puisse être maintenue pressée et déclenche [[love.keypressed (Français)|love.keypressed]] plusieur fois.
    love.keyboard.setKeyRepeat(true)
end
 
function love.textinput(t)
    text = text .. t
end
 
function love.keypressed(key)
    if key == "backspace" then
        -- récupère le décalage en octets du dernier caractère UTF-8 de la chaîne.
        local byteoffset = utf8.offset(text, -1)
 
        if byteoffset then
            -- supprime le dernier caractère UTF-8.
            -- string.sub travaille sur les octets plutôt que les caractères UTF-8, on ne peut donc pas utiliser 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

Voir également


Autres langues