Seuls les membres ayant 30 points peuvent parler sur le chat.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » fxSDK, un SDK alternatif pour écrire des add-ins
LephenixnoirEn ligneAdministrateurPoints: 16104 Défis: 140 Message

fxSDK, un SDK alternatif pour écrire des add-ins

Posté le 29/08/2014 22:00

Le fxSDK est une alternative au SDK habituel de Casio. Il permet de développer des add-ins pour la famille de la Graph 35+E et la Graph 90+E, et offre de meilleures performances et plus de possibilités !

Les outils du fxSDK

Le fxSDK marche sous Linux et a été compilé pour Mac OS ; il ne marche pas encore pour Windows mais on peut en discuter.

Il se fonde sur l'indispensable compilateur gcc et sa suite d'outils : as, ld, objdump, objcopy (entre autres). Contrairement au vieux compilateur du SDK, gcc est un compilateur moderne avec beaucoup de possibilités. Il n'est pas fourni avec le fxSDK et fait l'objet d'un tutoriel d'installation à part.

Côté calculatrice, c'est le noyau gint qui fait le travail. Il remplace fxlib et une partie de l'OS pour vous offrir des fonctionnalités plus cool et plus rapides. Les add-ins développés avec le fxSDK utilisent gint toutes les trois lignes !

Le fxSDK fournit également des outils spécifiques pour compiler et étudier les programmes de la calculatrice.

fxsdk est un petit gestionnaire de projet qui vous permet de créer et compiler facilement des projets sans vous prendre la tête avec le Makefile. Parfait si vous ne voulez pas connaître toutes les détails compliqués.

fxg1a sert à créer les fichiers g1a finaux à partir du programme compilé. C'est le successeur de mon vieux g1a-wrapper qui était beaucoup moins puissant.

fxconv convertit des données pour vos add-ins, commes vos images ou polices, dans des formats spécifiques de gint. C'est un peu comme le Sprite Coder mais ça vous évite de copier des gros tableaux dans votre programme et surtout le dessin est beaucoup plus performant !

fxos est un désassembleur et manipulateur d'OS capable de retrouver et disséquer des syscalls en un tour de poignet. C'est un outil de reverse-engineering dont l'usage principal est de produire des listings assembleur annotés pour comprendre très rapidement le code.

Il y a pas mal de différences avec le SDK de Casio donc passer au fxSDK nécessite un peu d'adaptation.

Installer le fxSDK sur votre ordinateur

Ça se passe en trois étapes :

1. Compiler un compilateur gcc à destination de la calculatrice
2. Installer le fxSDK
3. Installer le noyau, gint

Je suppose ici que vous connaissez les bases de la ligne de commande, mais si ce n'est pas le cas, n'hésitez pas à laisser un commentaire pour demander.

La première chose est de vous préparer un cross-compilateur gcc. Vous pouvez sauter l'installation du g1a-wrapper et venir ici dès que la libgcc est installée. Assurez-vous que le compilateur est dans le PATH est vous serez prêt ! C'est le plus gros morceau donc une fois que vous aurez ça, vous aurez déjà pratiquement fini.

Clônez le dépôt git du fxSDK depuis la forge de Planète Casio (vous pouvez aussi utiliser SSH).

% git clone 'https://gitea.planet-casio.com/Lephenixnoir/fxsdk.git'

Configurez le fxSDK ; vous pouvez taper "./configure --help" voir les options disponibles. Par défaut, le fxSDK sera installé dans votre dossier personnel (dans ".local").

% cd fxsdk
% ./configure

Ensuite compilez et installez ! Si vous avez choisi un dossier d'installation différent avec --prefix ou si vous compilez sous Mac, vous pourriez avoir besoin de sudo à l'installation.

% make
% make install

Assurez-vous que votre dossier de destination est dans votre PATH, puis vous pouvez installer gint.

Vous êtes alors prêt à partir !

Développer des programmes avec le fxSDK

TODO: Ajouter l'utilisation de fxsdk.

Toute la partie programmation revient à développer des programmes avec gint. Les tutoriels d'utilisation de gint couvrent tous ce dont vous aurez besoin, y compris l'utilisation de fxconv.


Fichier joint


Pages : Précédente1 ... , 12, 13, 14, 15, 16, 17, 18, 19, 20, 21Suivante
Shadow15510Hors ligneAdministrateurPoints: 3946 Défis: 16 Message

Citer : Posté le 01/07/2019 17:49 | #


Prochaine étape : s'en servir, ça va pas être de la tarte non plus, mais là le problème c'est moi !

Ajouté le 09/07/2019 à 18:21 :
cf mon dernier post : Comment ça marche ?
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   95%
LephenixnoirEn ligneAdministrateurPoints: 16104 Défis: 140 Message

Citer : Posté le 09/07/2019 18:28 | #


... tu pourrais situer le contexte au moins.

Shadow15510 : Merci je pensais déclarer mes 256 matrices map dans un fichier.c
Shadow15510 : pour pas trop polluer le main
Lephenixnoir : Raah c'est moche.
Lephenixnoir : Tu devrais les coder dans des fichiers à part et les convertir avec fxconv, c'est fait pour ça :x

Qu'est-ce qu'une map ici ? C'est juste un gros paquet de données organisées dans un tableau. C'est des valeurs les unes à la suite des autres dans la mémoire.

Il y a plein de façon de s'arranger pour avoir à sa disposition un gros paquet de données dans la mémoire.

L'une d'elles consiste à écrire dans le code un gros tableau avec toutes les valeurs. C'est moche parce que la donnée d'origine n'a sans doute rien à voir. Pour une image gint par exemple c'est une structure avec plein d'infos. Et parce qu'il y a de la redondance entre le code et les assets.

La façon utilisée par fxconv consiste à générer un fichier objet avec les données et une variable dessus. Pendant la compilation, tu t'en sers pour obtenir un .o que tu linkes avec tous les autres .o issus de la compilation des fichiers sources et voilà, c'est comme si tu avais écrit ton tableau sauf que tu n'en a pas eu besoin.

La façon de produire un tel fichier est avec la commande :

% fxconv -b <fichier source> -o <fichier objet> name:<variable>

Par exemple :

% printf "Hello, World!\0" > str.bin
% fxconv -b str.bin -o str.o name:str

Cette commande crée un fichier str.o qui contient une variable str dont le contenu est "Hello, World!".
Shadow15510Hors ligneAdministrateurPoints: 3946 Défis: 16 Message

Citer : Posté le 09/07/2019 18:33 | #


Donc on créer un tableau en *.o sans le coder ? Mais comment je fais pour coder avec ? C'est pas pratique ça veut dire que je vais avoir 256 fichiers *.o qui vont se balader ? et qu'il faudra que je les linke à la main un par un ?
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   95%
LephenixnoirEn ligneAdministrateurPoints: 16104 Défis: 140 Message

Citer : Posté le 09/07/2019 18:35 | #


est pas pratique ça veut dire que je vais avoir 256 fichiers *.o qui vont se balader ?

Ces fichiers .o ne sont que le produit de la compilation. Ils sont dans build-fx et ne sont pas sur le dépôt. Ce qui compte c'est str.bin dans mon exemple.

et qu'il faudra que je les linke à la main un par un ?

Mais non, le linker c'est une commande à la fin de la compilation, c'est le Makefile qui la balance et tous les fichiers partent dedans en même temps. Il suffira de modifier une fois le Makefile xD
Shadow15510Hors ligneAdministrateurPoints: 3946 Défis: 16 Message

Citer : Posté le 09/07/2019 18:39 | #


Je comprend rien…

Comment on fait pour mettre les 256 map dans un fichier (disons Matrices_map) ?
% const int map_1_1 = {{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}} > Matrices_map

Ça marche pas comme ça ?

Ajouté le 09/07/2019 à 20:04 :
Alors reprenons depuis le début ^^'

J'aimerai un système de cartes pour pouvoir afficher le maps du monde dans le cadre du projet Odyssée.
J'ai donc créer une fonction map_init() qui prends les coordonnées de la map à afficher au sein du monde. Une map représente un écran du jeu et le monde est l'ensemble des maps du jeu.

J'était partit sur un truc bête et méchant : map_init regarde les coordonnées et par deux switch() imbriqués la fonction retourne la map sous la forme d'une matrice… Le problème est que l'on ne peut pas passer de matrice en argument de fonctions comme ça… Je passe aux pointeurs pour modifier directement la matrice, mais celle-ci est déjà déclarée et impossible de modifié une matrice déjà déclarée à coup de {}… Donc Lephe m'a proposé la solution suivante qui m'a paru pas bête : avoir toutes les maps du monde déjà stockées quelques part. Et jouer avec un pointeur qui va pointer sur telle ou telle map.

La question est que j'ai voulu faire un fichier *.c qui contient toutes les map du monde. Avec son *.h j'aurais eu une sorte de bases de données avec mes maps. Lephe m'a ouvertement dit que c'était atroce comme méthode et j'ai toujours pas compris comment faire sans mon fichier *.c et son header…
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   95%
LephenixnoirEn ligneAdministrateurPoints: 16104 Défis: 140 Message

Citer : Posté le 10/07/2019 01:29 | #


Tout ce que tu dis est juste.

La question est que j'ai voulu faire un fichier *.c qui contient toutes les map du monde. Avec son *.h j'aurais eu une sorte de bases de données avec mes maps. Lephe m'a ouvertement dit que c'était atroce comme méthode et j'ai toujours pas compris comment faire sans mon fichier *.c et son header…

Pourquoi est-ce une solution peu satisfaisante ?

1. Le format est terrible, tu veux faire tes map avec Tiled et pas en modifiant un fichier C.
2. Si tu as les deux (la map avec Tiled et le fichier C avec le tableau), tu as de l'information redondante. Un jour tu vas modifier le fichier C et oublier de modifier le fichier Tiled, ou l'inverse.
3. Demain tu veux rajouter la taille de la map à côté de la matrice. Tu vas créer des variables en plus ? Rajouter deux éléments (la hauteur et la largeur) dans la matrice alors que ce ne sont pas des cases ? Aucune solution n'est satisfaisante.

La vérité, c'est que ta map c'est des données qui ne proviennent pas du code mais du reste des fichiers du projet. Il n'y a pas de bonne raison d'en faire un tableau à part "je ne sais pas comment y accéder autrement".

Voici une autre méthode pour accéder à des données dans le programme. Cela repose sur un principe simple : le g1a ce n'est pas des fichiers C, c'est du code issu de plusieurs fichiers objets. Les fichiers C sont compilés en fichiers objets, mais il peut y avoir des fichiers objets venant d'ailleurs. En particulier il peut y en avoir qui contiennent juste une variable avec des données.

Avec fxconv, tu peux créer ce genre de fichiers. La forme la plus simple (-b) consiste à fournir un fichier quelconque <source>. fxconv crée alors un fichier objet <objet> qui contient juste les octets de <source> et une variable que indique l'adresse mémoire, <var>.

fxconv -b <source> -o <objet> name:<var>

Prenons un exemple. Commeçons par créer un fichier contenant des données :

% printf 'Hello, World!\0' > msg.bin

Pour voir les données contenues dans le fichier sous forme brute, j'utilise l'outil xxd, qui affiche les octets individuellement.

% xxd msg.bin
00000000: 4865 6c6c 6f2c 2057 6f72 6c64 00         Hello, World.

La ligne est découpée en trois parties : d'abord la position dans le fichier. 00000000 signifie que je suis au début du fichier, ça augmente de 16 octets par ligne soit 10 en hexa. Ensuite les octets eux-mêmes, 48, 65, 6c, etc. C'est noté en hexa là-aussi. À droite il y a les caractères ASCII correspondant, H, e, l, etc. Le dernier octet 00 n'est pas un caractère ASCII affichable, donc xxd affiche un point à la place. 00 sert à indiquer la fin d'une chaîne de caractères en C.

J'ai donc un fichier de 13 octets. J'aimerais que dans mon add-in, il y ait quelque part ces 13 octets dans la mémoire (pour que je puisse afficher "Hello, World" à l'écran) et il me faut une variable pour pointer dessus, disons hello_world.

Je demande à fxconv de créer un fichier objet qui contient ça :

% fxconv -b msg.bin -o msg.o name:hello_world

On peut regarder à l'intérieur du fichier msg.o ce qui s'est passé avec sh3eb-elf-objdump. Voyons voir les variables définies là :

% sh3eb-elf-objdump -t msg.o

msg.o:     file format elf32-sh

SYMBOL TABLE:
00000000 l    d  .rodata    00000000 .rodata
00000000 g       .rodata    00000000 _hello_world
0000000d g       .rodata    00000000 _hello_world_end
0000000d g       *ABS*    00000000 _hello_world_size

Je ne veux pas rentrer dans les détails, on remarque juste qu'on a trois symboles _hello_world, _hello_world_end, et _hello_world_size. Le premier contiendra l'adresse de début du texte, le second l'adresse de fin, le troisième contient la taille. Les deux premiers n'ont pas encore leur valeur définitive car elle ne sera choisie que lorsqu'on liera ensemble tous les .o à la fin de la compilation.

Dans le code C, je peux alors dire que ce tableau existe, et l'utiliser :

extern char hello_world[];
dtext(1, 1, hello_world, C_BLACK, C_NONE);

Bon, jusque-là ça va ? Je n'ai pas fini mais je veux être sûr que t'as bien compris jusqu'ici.

Non, tu n'auras pas à taper toutes les commandes à la main, bien sûr que non.
Shadow15510Hors ligneAdministrateurPoints: 3946 Défis: 16 Message

Citer : Posté le 11/07/2019 08:29 | #


Buh… J'ai pas de map avec Tiled… je m'en sert juste pur voir si ça rend bien. Donc il n'y aura pas redondance puisque les map Tiled n'existent pas… non ?

Sinon je pense que j'ai compris à peu près tout… ^^'
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   95%
Cakeisalie5Hors ligneMembre de CreativeCalcPoints: 1753 Défis: 10 Message

Citer : Posté le 11/07/2019 13:03 | #


En soi tu peux très bien réaliser ta map avec Tiled et l'exporter dans ton propre format avec un script Python. Tu as une partie de la doc qui y est consacrée :

https://doc.mapeditor.org/en/stable/manual/export/#python-scripts
https://doc.mapeditor.org/en/stable/manual/python/
https://github.com/bjorn/tiled/tree/master/src/plugins/python/scripts

Ensuite, une fois ta map exportée dans un bon format binaire, tu la mets dans un truc que tu peux linker avec tes fichiers C grâce à la méthode qu'a décrite Lephé, et c'est bon. En plus une fois le script réalisé ça sera beaucoup plus facile pour toi et tes collaborateurs⋅trices de modifier les sources de ton jeu.

Promotion ordinaire sur les inscriptions sur Planète Casio : en ce moment, c'est gratuit !
Besoin d'utilitaires de transfert vers et depuis la calculatrice sous GNU/Linux ?
Shadow15510Hors ligneAdministrateurPoints: 3946 Défis: 16 Message

Citer : Posté le 11/07/2019 13:15 | #


Okay, donc les maps peuvent être enregistrées comme ça… ? Mais, et les obstacles ? Les dessins, on les affiches comment ? J'aime pas trop cette solution : je connais pas du tout je préfère autant les bonnes vieilles matrices avec un numéro par case qui correspond au dessin à afficher… Et surtout je ne vois pas l'interêt…
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   95%
HackcellEn ligneMembrePoints: 1150 Défis: 10 Message

Citer : Posté le 11/07/2019 13:16 | #


Et comment tu gére les collisions avec ta bonne vieille matrice ?
I usually spend meow time cosplaying as a diligent student...
So it can get pretty stressful.
That's exactly why PC is such a happy place for meow to be ⭐
Shadow15510Hors ligneAdministrateurPoints: 3946 Défis: 16 Message

Citer : Posté le 11/07/2019 13:17 | #


Ben on regarde le numéro de la case sur laquelle le joueur veut aller si c'est un numéro qui dessine un mur par exemple le joueur ne bouge pas si il n'y a rien d'affiché sur cette case, le joueur se déplace…
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   95%
HackcellEn ligneMembrePoints: 1150 Défis: 10 Message

Citer : Posté le 11/07/2019 13:18 | #


spoiler, Tiled fait pareil
I usually spend meow time cosplaying as a diligent student...
So it can get pretty stressful.
That's exactly why PC is such a happy place for meow to be ⭐
Shadow15510Hors ligneAdministrateurPoints: 3946 Défis: 16 Message

Citer : Posté le 11/07/2019 13:20 | #


Oui, mais comment il comprend que ce dessin est un mur ou un PnJ qu'il faut lancer la fonction interact() si c'est un PnJ ou maisons() si c'est une porte ?
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   95%
HackcellEn ligneMembrePoints: 1150 Défis: 10 Message

Citer : Posté le 11/07/2019 13:23 | #


Bah comme tu ferais avec l'ancienne méthode. Tiled te permet juste d'automatiser le passage de ta map graphique vers ta "matrice", rendant le tout plus simple et diminuant les chances d'erreurs inattention.
I usually spend meow time cosplaying as a diligent student...
So it can get pretty stressful.
That's exactly why PC is such a happy place for meow to be ⭐
Shadow15510Hors ligneAdministrateurPoints: 3946 Défis: 16 Message

Citer : Posté le 11/07/2019 13:26 | #


Mais vu que je n'ai pas besoin de rien afficher… >_<' je n'ai pas de correspondance entre dessins et numéro…
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   95%
HackcellEn ligneMembrePoints: 1150 Défis: 10 Message

Citer : Posté le 11/07/2019 13:28 | #


En français ?
I usually spend meow time cosplaying as a diligent student...
So it can get pretty stressful.
That's exactly why PC is such a happy place for meow to be ⭐
Shadow15510Hors ligneAdministrateurPoints: 3946 Défis: 16 Message

Citer : Posté le 11/07/2019 13:33 | #


Lorsque j'affiche ma map avec une matrice, j'ai une correspondance entre dessins et numéro :
0 -> case vide
1 -> mur
2 -> PnJ
3 -> porte

et quand je veux savoir ce qu'il y a sur la case dans laquelle le joueur veut aller, je me sert de ces correspondances pour savoir ce qu'il y a dans la case. Mais avec Tiled, toutes la map est affiché comme une image (de ce que j'ai compris… ) donc plus besoin de numéros. Autrement dit avec Tiled je suis incapable de savoir quel est le dessin affiché à l'écran pour des coordonnées données.
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   95%
HackcellEn ligneMembrePoints: 1150 Défis: 10 Message

Citer : Posté le 11/07/2019 13:37 | #


T'as mal compris, la map est une image sur ton écran d'ordinateur et tu peux effectivement exporter cette image.
Mais ici on te parle des fonctions d'export qui te permettrait de générer une matrice qui fait correspondre les dessins avec des numéros. (test l'export csv par exemple et regarde ce que ça te donne
I usually spend meow time cosplaying as a diligent student...
So it can get pretty stressful.
That's exactly why PC is such a happy place for meow to be ⭐
Shadow15510Hors ligneAdministrateurPoints: 3946 Défis: 16 Message

Citer : Posté le 11/07/2019 13:43 | #


Et les numéros correspondent donc… je vois…
Mais pour afficher la map dans gint ?
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   95%
HackcellEn ligneMembrePoints: 1150 Défis: 10 Message

Citer : Posté le 11/07/2019 13:44 | #


ça faut voir avec Senpai
I usually spend meow time cosplaying as a diligent student...
So it can get pretty stressful.
That's exactly why PC is such a happy place for meow to be ⭐
LephenixnoirEn ligneAdministrateurPoints: 16104 Défis: 140 Message

Citer : Posté le 11/07/2019 14:19 | #


Shadow15510 a écrit :
Buh… J'ai pas de map avec Tiled… je m'en sert juste pur voir si ça rend bien. Donc il n'y aura pas redondance puisque les map Tiled n'existent pas… non ?

Toi non mais les autres personnes de l'équipe ne codent pas les maps en hexadécimal ! Et tu ne vas pas les convertir à la main... d'abord parce que c'est chiant et le risque d'erreur est élevé, et ensuite parce que ça te fera des duplications puisque les originaux seront sur le dépôt.

La méthode de Cake est exactement là où je voulais en venir.

Shadow15510 a écrit :
Okay, donc les maps peuvent être enregistrées comme ça… ?

Essaie de te familiariser avec l'idée que les données c'est juste une suite d'octets. Ta matrice est une suite d'octets. Si tu apporte ces octets dans la mémoire, tu as une matrice.

Tu connais normalement deux façons de faire ça :
1. Faire un tableau
2. Créer un fichier qui contient ces octets et utiliser fxconv

-

Je fais une parenthèse pour considérer un autre cas : les images. Comme tu l'as vu dans le tutoriel d'utilisation de gint, les images sont converties automatiquement par fxconv. C'est pratique parce qu'il n'y a plus de Sprite Converter et plus de tableau à écrire à la main. Mais surtout c'est nécessaire parce que tu ne pourrais pas convertir à la main et créer un tableau : le format est beaucoup trop compliqué.

-

Mais, et les obstacles ? Les dessins, on les affiches comment ?

Ta map est toujours une matrice, les octets sont juste apportés par fxconv au lieu de te donner un tableau à écrire. Quant aux dessins, tu auras une grande image de tout le tileset qui sera convertie automatiquement et tu appeleras dsubimage() pour afficher un tile à chaque fois.

je préfère autant les bonnes vieilles matrices avec un numéro par case qui correspond au dessin à afficher… Et surtout je ne vois pas l'interêt…

Mais c'est exactement ce que tu auras parce que le fichier créé par fxconv va contenir exactement la matrice que tu aurais écrite. Sauf qu'elle aura été écrite à ta place, avec plusieurs avantages :

1. L'action de calculer les valeurs pour la matrice à partir de la map sera automatisée (avec un script, comme Cake a dit)
2. Si un tile bouge sur le tileset, il suffira de reconvertir au lieu de devoir changer tous les numéros de ce tile à la main
3. Sur le dépôt il n'y aura qu'une version de la map : l'originale avec Tiled. Avoir deux versions (Tiled et le tableau) c'est risquer qu'il y a des différences entre les deux
4. Le concepteur de maps peut utiliser un outil agréable

Et ok, toi tu utilises peut-être pas Tiled. Pour tester ton rendu de map tu peux totalement faire un tableau, à la limite on s'en fout. Mais la personne de l'équipe d'Odyssée qui fait la map n'aura clairement pas envie de se taper une syntaxe aussi barbare que des numéros les uns à la suite des autres sans rendu visuel, et pour les vraies maps en production il faut prendre le temps de le faire correctement.

Oui, mais comment il comprend que ce dessin est un mur ou un PnJ qu'il faut lancer la fonction interact() si c'est un PnJ ou maisons() si c'est une porte ?

Bien sûr tu ne regardes pas le dessin, tu as toujours ta matrice avec les numéros que tu as annoncés, donc si c'est 1 (mur) ou 2 (PNJ) on lance interact() et si c'est 3 (porte) on lance maisons(). Tu as forcément à la fois la map d'un côté (la matrice) et le tileset de l'autre (les images).

Shadow15510 a écrit :
Mais avec Tiled, toutes la map est affiché comme une image (de ce que j'ai compris… )

Aaaah, mais non. Tiled gère la map comme une matrice. Mais il te permet de voir la map pendant que tu la crées ! C'est pour ça que généralement t'as envie de l'utiliser : tu peux voir au fur et à mesure à quoi ça va ressembler.

Faire une map entièrement sur une image ce serait pas efficace du tout (et puis si deux tiles ont la même tête...).

J'en profite pour rajouter que quand tu exportes la map avec Tiled il va te mettre des numéros qui correspondent en gros à la position du tile dans ton tileset : c'est pour ça qu'il est important que le tileset bouge pas trop (ou en tout cas que les tiles utilisés restent à leur place). Après tu utilises un script pour créer la matrice dans un fichier à partir du fichier Tiled, tu appelles fxconv sur le fichier ce qui créer la matrice comme une variable, et à la prochaine compilation la variable sera disponible.

Tout ça est tellement automatisable qu'il suffira de réenregistrer le fichier dans Tiled et de taper fxsdk build-fx et hop, l'add-in est recompilé avec la nouvelle map.

Shadow15510 a écrit :
Mais pour afficher la map dans gint ?

Tu auras deux variables : la map et le tileset. Pour afficher la map, tu fais une boucle pour parcourir toutes les cases visibles et tu récupères leur numéro. À partir du numéro tu calcules la position du tile associé dans l'image du tileset. Puis tu appelles dsubimage() pour afficher la partie correspondante.
Pages : Précédente1 ... , 12, 13, 14, 15, 16, 17, 18, 19, 20, 21Suivante

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2019 | Il y a 95 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd