Saisir du texte dans le BGE


Une vidéo pour voir ce que ça donne :

L’exemple à télécharger :

messages_test.tar.gz

Décompressez l’archive, ouvrez le fichier le fichier test.blend (avec Blender !) et lancez le jeu (touche P).

Quel est le problème

Le BGE (Blender Game Engine) ne permet d’intercepter qu’une partie des touches du clavier.
La liste des touches prises en compte est ici : bge.events.html

Pour contrôler un jeu, cela suffit ; mais pas pour saisir du texte.
Or j’en avais besoin pour le collège 3D.

Je propose donc ici la solution que j’ai trouvée pour contourner ce problème.

Principe

Tout est programmé en Python. Dans le fichier Blender (test.blend), un sensor Allways est relié au script Python qui se charge de tout le reste.

messages.py (ou exe)

Lors de l’appui sur la touche M, c’est un autre programme qui est lancé (messages.py ou messages.exe).
Il est appelé à l’aide du module subprocess de Python.

Le programme messages contient une simple zone pour saisir du texte et 2 boutons. Pour l’interface, on teste :

PySide et PyQt donnent une interface plus agréable (en Qt), mais tkinter est forcément disponible avec Python (donc on l’utilise en dernier recours).
Pour la version Windows (messages.exe), je n’ai mis que tkinter.

enregistrement dans un fichier

Lorsqu’on quitte le programme messages, le texte est enregistré dans un fichier.

Ce fichier est alors lu par le programme principal, et le texte est affiché dans le BGE.

remarques et compléments

structure du dossier messages_test

├── data
            │   ├── Comfortaa_Bold.ttf
            │   └── SIL OFL Font License Comfortaa.txt
            ├── game_loop.py
            ├── __init__.py
            ├── scripts
            │   ├── __init__.py
            │   ├── messages.py
            │   ├── utils_i18n.py
            │   ├── utils.py
            │   └── winexe
            │       ├── messages.exe
            │       ├── messages.py
            │       ├── python27.dll
            │       ├── etc...
            │       ├── tcl
            │       │   ├── tcl8.5
            │       │   │   └── ...
            │       │   └── tk8.5
            │       │       └── ...
            │       └── ...
            ├── test.blend
            └── translations
                └── divers.csv