Scripts Python

Note

Since Tiled 1.3, Tiled can be extended using JavaScript. The JavaScript API provides a lot more opportunity for extending Tiled’s functionality than just adding custom map formats. It is fully documented and works out of the box on all platforms. It recommended over the Python plugin whenever possible.

Tiled ships with a plugin that enables you to use Python 3 to add support for custom map and tileset formats.

Pour que les scripts soient chargés, ils doivent être placé dans ~/.tiled. Tiled vérifie si ce répertoire change, donc il n’y a pas besoin de relancer Tiled après avoir ajouté ou changé des scripts (cependant le répertoire doit exister avant de lancer Tiled).

Il y a plusieurs scripts d’exemple disponibles dans le dépôt.

Note

Pour créer le dossier ~/.tiled sur Windows, ouvrez l’invite de commande (cmd.exe), qui doit commencer dans votre dossier personnel par défaut, puis entrez mkdir .tiled pour créer le dossier.

Sur Linux, les dossiers commençant avec un point sont cachés par défaut. Dans la plupart des explorateurs de fichiers vous pouvez activer la visibilité des fichiers cachés en utilisant Ctrl+H.

Note

Depuis Tiled 1.2.4, les greffons en Python sont désactivés par défaut, car le chargement de ce greffon peut causer un plantage dépendant de la version de Python installée sur le système (#2091). Pour utiliser le greffon en Python, veuillez tout d’abord l’activer dans les Préférences.

Avertissement

Sur Windows, Python n’est pas installé par défaut. Pour que le greffon Python de Tiled marche, il faut installer Python 3.8 (récupérez-le depuis https://www.python.org/). Il vous faudra aussi cocher la case « Add Python 3.8 to PATH » (Ajouter Python 3.8 au PATH) dans le programme d’installation :

../../_images/python-windows.png

On Linux you will also need to install the appropriate package. However, currently Linux builds are done on Ubuntu 20.04 against Python 3.8, and you’d need to install the same version somehow.

The Python plugin is not available for macOS releases, nor in the Ubuntu snap.

Exemple de Greffon d’Exportation

Supposez que vous voulez une carte exportée dans le format suivant :

29,29,29,29,29,29,32,-1,34,29,29,29,29,29,29,
29,29,29,29,29,29,32,-1,34,29,29,29,29,29,29,
29,29,29,29,29,29,32,-1,34,29,29,29,29,29,29,
29,29,29,29,29,29,32,-1,34,29,29,29,29,29,29,
25,25,25,25,25,25,44,-1,34,29,29,29,29,29,29,
-1,-1,-1,-1,-1,-1,-1,-1,34,29,29,29,29,29,29,
41,41,41,41,41,41,41,41,42,29,29,24,25,25,25,
29,29,29,29,29,29,29,29,29,29,29,32,-1,-1,-1,
29,29,29,29,29,29,39,29,29,29,29,32,-1,35,41,
29,29,29,29,29,29,29,29,29,29,29,32,-1,34,29,
29,29,29,29,29,29,29,29,37,29,29,32,-1,34,29;

Vous pouvez réalisez ceci en sauvegardant le script example.py suivant dans le dossier de scripts :

from tiled import *

class Example(Plugin):
    @classmethod
    def nameFilter(cls):
        return "Example files (*.example)"

    @classmethod
    def shortName(cls):
        return "example"

    @classmethod
    def write(cls, tileMap, fileName):
        with open(fileName, 'w') as fileHandle:
            for i in range(tileMap.layerCount()):
                if isTileLayerAt(tileMap, i):
                    tileLayer = tileLayerAt(tileMap, i)
                    for y in range(tileLayer.height()):
                        tiles = []
                        for x in range(tileLayer.width()):
                            if tileLayer.cellAt(x, y).tile() != None:
                                tiles.append(str(tileLayer.cellAt(x, y).tile().id()))
                            else:
                                tiles.append(str(-1))
                        line = ','.join(tiles)
                        if y == tileLayer.height() - 1:
                            line += ';'
                        else:
                            line += ','
                        print(line, file=fileHandle)


        return True

Ensuite vous pourrez voir une entrée « Example files » dans la liste de types dans Fichier > Exporter, qui vous permet d’exporter la carte en utilisant le script ci-dessus.

Note

This example does not support the use of group layers.

Déboguer Votre Script

Toute erreur rencontrée lors de l’analyse ou du lancer du script sont affichées dans la Console, qui peut être activée dans Vue > Vues et Barres d’Outils > Console.

Référence de l’API

Ce serait bien d’avoir une référence complète de l’API documentée ici, mais pour le moment veuillez voir le fichier source pour les classes et méthodes disponibles.

Note

Toute aide pour maintenir le plugin en Python est vivement appréciée. Voir tickets ouverts liés au support Python