Saisir du texte dans le BGE
Une vidéo pour voir ce que ça donne :
L’exemple à télécharger :
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.
- sous GNU/Linux ou Mac, Python étant forcément installé, c’est messages.py qui est lancé (il fonctionne avec Python >=2.7 ou 3.x)
- sous Windows, comme Python n’est pas forcément installé, j’ai fait un executable du programme (messages.exe)
Le programme messages contient une simple zone pour saisir du texte et 2 boutons. Pour l’interface, on teste :
- d’abord la présence de PySide
- s’il n’y a pas PySide, on cherche s’il y a PyQt
- enfin, si aucun des 2 précédents n’est disponible, on utilise tkinter
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
- tkinter n’est malheureusement pas dans le Python embarqué dans le BGE,
sinon tout cela aurait été plus simple - j’en profite pour donner un exemple de la technique que j’utilise pour internationaliser le programme (i18n) avec des fichiers csv
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
- le dossier data contient la police d’écriture utilisée pour afficher les messages
- game_loop.py est le module appelé depuis le fichier Blender (test.blend)
- messages.py est dans le sous-dossier scripts
- le dossier scripts contient d’autres trucs utiles :
- utils.py contient des fonctions diverses
- utils_i18n.py gère l’internationalisation (i18n)
- le sous-dossier winexe qui contient la version pour Windows
- le dossier translations contient le fichier csv permettant l’internationalisation
l’intérêt de passer par un fichier csv est qu’il peut être modifié avec LibreOffice (ou autre)