**Le SDK pour fx-9860/Graph85** Topic officiel
Posté le 18/07/2007 15:08
Vu la multitude de topics sur le SDK de la 85, j'ai décidé d'en faire un seul et unique, où l'on posera nos problèmes et explications sur ce même topic, et non pas sur 50, par souci de clareté et de facilité.
Des nouveautés ? Des problèmes ? Des idées ?
Exposez les ici !
Voici une liste de commandes commencées par Muelsaco. N'hésitez pas à rajouter vos commandes dans le topic je les rajouterai pour en faire profiter tout le monde. Merci.
// Locate X,Y,"Texte"
:arrow: locate(x,y); Print("Texte");
// Text X,Y,"Texte"
:arrow: PrintMini(x,y,"Texte",0);
// F-Line x1,y1,x2,y2
:arrow: Bdisp_DrawLineVRAM(x1,y1,x2,y2);
// Tracer une ligne blanche
:arrow: Bdisp_ClearLineVRAM(x1,y1,x2,y2);
// PxlOn x,y & PxlOff x,y
:arrow: Bdisp_SetPoint_VRAM(x,y,<couleur>)
<couleur> : 0 pour le blanc, 1 pour le noir
// Cls
:arrow: Bdisp_AllClr_DDVRAM();
// Actualiser l'écran
:arrow: Bdisp_PutDisp_DD();
Fonction très importante. Elle permet d'afficher une image tracée virtuellement dans la VRAM. Toute image doit d'abord être dessinée dans la VRAM puis affichée à l'écran. Vous ne verrez donc pas votre image s'afficher tant que vous n'aurez pas appelé Bdisp_PutDisp_DD(). À noter que les fonctions GetKey() et Print() l'appellent automatiquement.
While <exp1>
<code>
WhileEnd
:arrow:
while(<exp1>)
{
<code>
}
// StoPict x
:arrow: SaveDisp(x);
x variant de 1 à 3 uniquement.
// RclPict x
:arrow: RestoreDisp(x);
x variant de 1 à 3 uniquement.
// Ouvrir un popup (comme les erreurs syntaxe, etc)
:arrow: PopUpWin(<taille>);
<taille> : de 1 à 8.
Rappels sur les variables globales : Source
* Les variables globales sont à utiliser avec précaution, puisqu'elles créent des liens invisibles entre les fonctions. La modularité d'un programme peut en souffrir et le programmeur risque de perdre la vue d'ensemble.
* Il faut faire attention à ne pas cacher involontairement des variables globales par des variables locales du même nom.
* Le codex de la programmation défensive nous conseille d'écrire nos programmes aussi 'localement' que possible.
L'utilisation de variables globales est jusitifiée, si
* Plusieurs fonctions qui ne s'appellent pas ont besoin des mêmes variables, ou
* Plusieurs fonctions d'un programme ont besoin du même ensemble de variables. Ce serait alors trop encombrant de passer toutes les variables comme paramètres d'une fonction à l'autre.
Citer : Posté le 05/09/2015 19:20 | #
Oh non, pas en global.
Tu passes la variable en argument. Pourquoi s'embêter ?
Citer : Posté le 06/09/2015 11:46 | #
Ouai je ferais comme ça
Ajouté le 16/09/2015 à 22:18 :
Bon finalement j'ai abandonné cette fonction car je ne l'utilise plus
Maintenant mon programme est fini, je le lance (sur SH4), je joue normal, pas de problèmes, je quitte, pas de problèmes, je lance un autre programme du menu (le menu RUNMAT par exemple, ou un autre Add-In), problème
"System Error"
"Target=97AF4F07"
"PC =80069818"
Et là je comprend pas parce que avant, le programme fonctionnait très bien, j'ai juste rajouté 2 - 3 trucs en plus, mais rien de "bizarre" quoi...
Ajouté le 19/09/2015 à 13:18 :
A l'aide ...
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)
Citer : Posté le 19/09/2015 16:59 | #
Je te renvoie sur ce post avec sa conclusion.
Il faut utiliser GetKey().
Citer : Posté le 20/09/2015 10:43 | #
Okay merci , je met GetKey() juste avant le return ?
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)
Citer : Posté le 20/09/2015 10:54 | #
Je n'ai jamais essayé cette méthode mais je suppose que tu peux essayer une combinaison de Putkey() et Getkey() à chaque fois que tu retournes au menu.
Citer : Posté le 20/01/2016 19:03 | #
Salut, alors voilà, étant donné le graaand nombre de sprites que j'ai j'utilise la fonctionnalité de Sprite Coder me permettant de tous les caler dans un autre tableau, de cette manière j'obtiens ça :
const unsigned char Image_Objet1[]={0xff, 0xff, 0xbf, 0xaf, 0xab, 0xab, 0xff, };
const unsigned char Image_Objet2[]={0x1, 0x1, 0x1, 0x1, 0x7d, 0x45, 0x7d, };
const unsigned char Image_Objet3[]={0x1, 0x1, 0x1, 0xf1, 0x9f, 0xe3, 0x3f, };
const unsigned char Image_Objet4[]={0x1, 0x1, 0x3d, 0xe5, 0x9f, 0xe3, 0x3f, };
const unsigned char Image_Objet5[]={0x19, 0x29, 0x5f, 0x83, 0xf5, 0x29, 0x31, };
const unsigned char Image_Objet6[]={0x1d, 0x39, 0x71, 0xff, 0x1d, 0x39, 0x71, };
const unsigned char Image_Objet7[]={0x39, 0x7d, 0x6d, 0x55, 0x45, 0x55, 0x7d, };
const unsigned char Image_Objet8[]={0x39, 0x4d, 0x55, 0x4d, 0x55, 0x4d, 0x7d, };
const unsigned char Image_Objet9[]={0xa3, 0xfd, 0x4b, 0x55, 0xa5, 0x7f, 0x8b, };
const unsigned char Image_Objet10[]={0x1, 0x1, 0x39, 0x75, 0x7d, 0x7d, 0x39, };
const unsigned char Image_Objet11[]={0x1, 0x1, 0x39, 0x45, 0x4d, 0x5d, 0x39, };
const unsigned char Image_Objet12[]={0x1, 0x45, 0x45, 0xff, 0x9b, 0xa3, 0xff, };
const unsigned char* Images_Objets[]={
Image_Objet0, //Ligne qui est indiqué dans le message d'erreur
Image_Objet1,
Image_Objet2,
Image_Objet3,
Image_Objet4,
Image_Objet5,
Image_Objet6,
Image_Objet7,
Image_Objet8,
Image_Objet9,
Image_Objet10,
Image_Objet11,
Image_Objet12
};
Mais à la compilation
C:\Users\Kirafi\Desktop\iCrew\Dessin.c(215) : C2130 (E) Initializer should be constant
Voilà et je ne comprend pas vraiment quel est le soucis avec les constantes ...
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)
Citer : Posté le 21/01/2016 09:32 | #
Ce genre d'initialisation n'est pas possible dans le scope global, il faut déplacer la déclaration de Image_Objets dans la fonction qui l'utilise à chaque fois.
Je te renvoie sur ce post sur StackOverflow.
Citer : Posté le 21/01/2016 18:25 | #
Oui mais la déclaration de Image_Objets est déjà déclaré dans la fonction qui l'utilise , enfin, je vais essayer de lire ton lien...
En fait, j'ai plusieurs fonctions de dessin de sprites, celle des murs, mobs, objets, inteface, etc... et je ne déclare les sprites des objets que dans la fonction qui les dessine, pareil pour les mobs, etc...
C'est pas bien ?
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)
Citer : Posté le 22/01/2016 16:43 | #
En fait ça pourrait fonctionner comme ça, pour commencer : gcc compile sans problème.
Le caractère constant de ton tableau n'est pas assuré car const signifie que la donnée de peut pas être modifiée par le programme, et non qu'elle est constante (par exemple un timestamp).
Je te conseille donc tout simplement de déclarer directement Image_Objets dans un double tableau, ce qui sera d'autant plus propre sans pour autant être gênant puisque tu ne perds rien à retirer les noms individuels des images.
Pour ta manière de gérer les sprites, il n'y a absolument aucun problème tant que le compilateur n'est pas au-delà de la simple stupidité, et même celui du SDK saura faire. Ça ne change strictement rien en termes de vitesse, reste que les images ne sont accessibles en brut que par la fonction qui les affiche. Quoi de plus normal après tout ?
Citer : Posté le 22/01/2016 18:07 | #
Oui c'est ce que je fais en temps normal, mais le nombre de sprites ne dépasse pas 50, là le soucis c'est que retirer le nom de plus de 300 sprites c'est plutôt long :aie2: !
Après finalement j'ai vu sur le topic de Fife et de son Kirby que pour la déclaration c'était plus intéressante de tout mettre dans un gros fichier "Sprites" , ce que je vais faire d'ailleurs.
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)
Citer : Posté le 22/01/2016 18:12 | #
Ben tu peux le faire automatiquement avec une expression régulière ou simplement avec un éditeur de texte performant. Il me faut trente secondes avec Sublime, je pense que c'est indispensable de pouvoir faire ce genre de choses rapidement pour ne pas être gêné quand qu'on développe par des soucis techniques aussi bêtes
Citer : Posté le 22/01/2016 18:51 | #
Ouai mais le problème c'est que les noms de mes sprites ne sont pas tous de la même taille, donc même en selectionnnant avec la fonctionnalité de Sublime je dois retoucher un par un... Ah mais attend... Aaaaaah mais siiii je change le nom avec Sprite Coder pour qu'ils aient tous la même taille (de nom) comme ça c'est plus simple pour la suppression !
Bon bah je fais ça , merci de m'avoir éclairé Lephé .
Ajouté le 22/01/2016 à 18:54 :
Par contre juste, la déclaration des sprites je le met dans un .h ou un .c ? Je pensais .h mais je sais pas trop ...
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)
Citer : Posté le 22/01/2016 19:14 | #
Dans un .c !!
On ne met dans les .h que les prototypes et déclarations de structures. Et éventuellement de la doc inline ce qui permet d'utiliser une fonction sans avoir besoin de chercher dans la doc ou le code pour savoir comment elle fonctionne.
La meilleure des solutions (selon moi) actuelle utilisant le SDK, c'est de créer une fonction qui copie en RAM les sprites, et retourne un pointeur sur une liste de pointeurs sur les-dits sprites. Ça permet d'utiliser au mieux la RAM, tout en évitant les variables globales immondes. L'avantage est que en plus tu peux modifier la fonction pour ne charger que les sprites dont tu as besoin (via un paramètre).
Citer : Posté le 22/01/2016 19:41 | #
Okay dans le .c !
Ta fonction a l'air compliqué genre moi je m'embête pas d'habitude, je déclare tout direct au début du programme et voilà quoi ...
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)
Citer : Posté le 22/01/2016 20:10 | #
Darks, on n'est pas obligés, c'est une copie supplémentaire inutile. Les laisser dans la ROM fait l'affaire.
Kirafi, tu peux les mettre dans un gros tas dans un .c (en static, dont accessible uniquement dans le fichier) et ajouter des fonctions pour les utiliser :
static const unsigned char items[] = {
...
};
void draw_item(int x, int y, int id)
{
...
}
Citer : Posté le 22/01/2016 21:08 | #
Et dans items[] = {...}
Je met les noms des trucs que j'ai déclaré dans le .c
item_1[] = {...};
item_2[] = {...};
//Etc...
//Dans le .c qui avec les fonctions de dessins
static const unsigned char items[] = {
item_1,
item_2,
//Etc...
};
void draw_item(int x, int y, int ID)
{
//On dessine l'item en prenant
items[ID]
}
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)
Citer : Posté le 22/01/2016 21:14 | #
Non, tu mets un double tableau :
{ ... },
{ ... },
...
};
Vérifie l'ordre des indices ([7][] ou [][7], je ne sais jamais).
Citer : Posté le 22/01/2016 21:16 | #
Okay, mais ce double tableau je le met dans le .c , et ce dernier je l'inclu au projet (dans la fenêtre à gauche dans le SDK) ?
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)
Citer : Posté le 22/01/2016 21:26 | #
C'est ça !
En fait tous les sprites seront internes au fichier objet (car static) donc cachés, ce fichier se comportera comme une boite noire sur laquelle il n'y a que des boutons de fonctions pour afficher des sprites
Comme ça si tu changes de méthode de stockage tu n'auras pas de problème.
Citer : Posté le 22/01/2016 21:28 | #
Okaay merci Lephé je comprend mieux .
Bon aller je fini le e-penser et je code tout ça .
Ajouté le 22/01/2016 à 21:49 :
Hum par contre, y'a pas moyen de mettre les déclarations après les fonctions ? parce que c'est embêtant de devoir scroller les 100ène de lignes de déclarations avant d'arriver au fonctions ...
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)
Citer : Posté le 22/01/2016 21:58 | #
Tu peux faire ceci :
void draw_item(...) {
...
}
const unsigned char items[] = {
...
};