**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 22/01/2016 21:58 | #
Tu peux faire ceci :
void draw_item(...) {
...
}
const unsigned char items[] = {
...
};
Citer : Posté le 22/01/2016 22:05 | #
Hum il me met "Missing array size" à la première ligne "const unsigned char items[];" (et à toutes les lignes du même genre).
Ajouté le 22/01/2016 à 22:11 :
Arpès tant que je suis dans les déclarations foireuses, ce genre de truc ne compile pas :
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 22:13 | #
Hum il me met "Missing array size" à la première ligne "const unsigned char items[];" (et à toutes les lignes du même genre).
Rooh mais utilisez gcc. Bon essaie avec extern, sinon je ne vois pas.
Après tant que je suis dans les déclarations foireuses, ce genre de truc ne compile pas :
Normal, c'est du C99 et le SDK est bloqué en C89. Il faut déclarer i avant.
Citer : Posté le 22/01/2016 22:17 | #
Bon okay ça marche... mais j'ai perdu 30 fps :aie2: ...
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 22:22 | #
Bon okay ça marche... mais j'ai perdu 30 fps ...
Euh attends quoi ?
Donc maintenant tu as des doubles tableaux en static et des fonctions d'affichage.
Avant tu avais des tableaux simples et des fonctions d'affichages... ? Et t'as perdu 30 fps ?
Citer : Posté le 22/01/2016 22:24 | #
Hum avant j'avais des doubles tableaux déclarés seulement dans les fonctions qui les utilisais, et là j'ai une déclaration en extern avant les fonctions et la déclaration en static après les fonctions. Et j'ai perdu 30 fps
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 22:32 | #
T'as pas mis les données dans la déclaration en extern ?
Bon ben sinon mais les grosses déclarations dans les fonctions et vire les extern... mais je comprends pas ce que fait ce compilateur...
Citer : Posté le 22/01/2016 22:37 | #
Ouai finalement je refais comme avant mais c'est vrai que là du coups bah je gagne 30 fps ...
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 22:55 | #
Ben en soit la modification la plus importante c'est le fait d'utiliser des doubles tableaux. Mais techniquement je ne comprends pas comment il peut gérer ça différemment alors que fondamentalement c'est la même chose.
C'est peut-être une bizarrerie du compilateur du SDK, je testerai avec gcc pour voir s'il y a une différence.
Citer : Posté le 22/01/2016 23:04 | #
Ouaip , alors après 30 fps c'est un peu exagéré parce que j'ai pris l'ancienne valeur que j'avais relevé, puis j'avais rajouté des trucs entre temps, enfin dans tout les cas mnt je tourne à 100, alors qu'avec les extern etc, à 90.
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 05/02/2016 23:08 | #
J'ai des tableaux contenant des valeurs correspondant à des sprites.
Pour les afficher, j'utilise la fonction ML_bmp_8_or().
J'ai plusieurs tableau de niveaux appelés Map1, Map2 ... et j'ai comme variable "map", qui contient un char du numéro de la map à afficher.
Mes sprites s'appellent Object_#.
# correspond à la valeur correspondant au sprite sélectionner.
Est-il possible de faire quelque chose comme ça : ML_bmp_8_or("Object_"+("Map"+"map")[VarI][VarJ], VarX, VarY) ?
Notes ( logiciel qui calcule votre moyenne, basic )
Professeur Layton ( jeu d'énigme en C )
Mario & Sonic Rush ( jeu de course 3D en C )
Jetpack Joyride de Drakalex007
Arcuz de Dark Storm
Casion de Az et Darkysun
Un jeu de course en 3D pour calculatrice :
http://www.planet-casio.com/Fr/programmes/voir_un_programme_casio.php?showid=2773&page=1.
Citer : Posté le 06/02/2016 11:23 | #
Ouhla ! C'est censé faire quoi ce truc horrible ? "Object_"+("Map"+"map")[VarI][VarJ],
Citer : Posté le 06/02/2016 12:56 | #
En fait, voici le code que j'aimerais optimiser :
3,[maroon]4[/maroon],[maroon]4[/maroon],[maroon]4[/maroon],[maroon]4[/maroon],[maroon]4[/maroon],[maroon]4[/maroon],[maroon]4[/maroon],[maroon]4[/maroon],[maroon]4[/maroon],[maroon]4[/maroon],[maroon]4[/maroon],[maroon]4[/maroon],[maroon]4[/maroon],[maroon]4[/maroon],[maroon]5[/maroon],
6,[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]8[/maroon],
6,[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]8[/maroon],
6,[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]8[/maroon],
6,[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]8[/maroon],
6,[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]8[/maroon],
6,[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]49[/maroon],[maroon]8[/maroon],
9,[maroon]10[/maroon],[maroon]10[/maroon],[maroon]10[/maroon],[maroon]10[/maroon],[maroon]10[/maroon],[maroon]10[/maroon],[maroon]10[/maroon],[maroon]10[/maroon],[maroon]10[/maroon],[maroon]10[/maroon],[maroon]10[/maroon],[maroon]10[/maroon],[maroon]10[/maroon],[maroon]10[/maroon],[maroon]11[/maroon]}
[purple]char[/purple] Map2[8][16]={
3,[maroon]4[/maroon],[maroon]4[/maroon],[maroon]4[/maroon],[maroon]4[/maroon],[maroon]4[/maroon],[maroon]4[/maroon],[maroon]4[/maroon],[maroon]4[/maroon],[maroon]4[/maroon],[maroon]4[/maroon],[maroon]4[/maroon],[maroon]4[/maroon],[maroon]4[/maroon],[maroon]4[/maroon],[maroon]5[/maroon],
6,[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]7[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]8[/maroon],
6,[maroon]24[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]1[/maroon],[maroon]2[/maroon],[maroon]8[/maroon],
6,[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]31[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]8[/maroon],
6,[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]8[/maroon],
6,[maroon]31[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]1[/maroon],[maroon]2[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]7[/maroon],[maroon]8[/maroon],
6,[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]7[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]49[/maroon],[maroon]8[/maroon],
9,[maroon]10[/maroon],[maroon]10[/maroon],[maroon]10[/maroon],[maroon]10[/maroon],[maroon]10[/maroon],[maroon]10[/maroon],[maroon]10[/maroon],[maroon]10[/maroon],[maroon]10[/maroon],[maroon]10[/maroon],[maroon]10[/maroon],[maroon]10[/maroon],[maroon]10[/maroon],[maroon]10[/maroon],[maroon]11[/maroon]}
void printLvl(map){
[purple]char[/purple] VarI;
[purple]char[/purple] VarJ;
[purple]char[/purple] level
[b][blue]for[/blue][/b](VarI=[maroon]0[/maroon], VarI<=[maroon]15[/maroon], VarI++){
[b][blue]for[/blue][/b](VarJ=[maroon]0[/maroon], VarJ<=[maroon]7[/maroon], VarJ++){
switch(map){
case 1:
switch(Map1[VarJ][VarI]){
case 1:
ML_bmp_8_or(Object_1,VarI*8+1,VarJ*8+1);
[b][blue]break[/blue][/b];
case 2:
ML_bmp_8_or(Object_2,VarI*8+1,VarJ*8+1);
[b][blue]break[/blue][/b];
...
}
case 2:
switch(Map2[VarJ][VarI]){
case 1:
ML_bmp_8_or(Object_1,VarI*8+1,VarJ*8+1);
[b][blue]break[/blue][/b];
case 2:
ML_bmp_8_or(Object_2,VarI*8+1,VarJ*8+1);
[b][blue]break[/blue][/b];
...
}
case 3:
...
}
}
}
}
J'aimerais bien éviter tous les switch.
Si quelqu'un sait comment faire, cela me ferait gagner beaucoup de temps et réduirait le poids de mon programme.
Ajouté le 06/02/2016 à 14:02 :
L'intérêt est également que je souhaiterais réaliser un éditeur de niveau. Par conséquent le nombre de niveau est indéfini, et je ne peux pas continuer mon switch jusqu'à +infini.
Notes ( logiciel qui calcule votre moyenne, basic )
Professeur Layton ( jeu d'énigme en C )
Mario & Sonic Rush ( jeu de course 3D en C )
Jetpack Joyride de Drakalex007
Arcuz de Dark Storm
Casion de Az et Darkysun
Un jeu de course en 3D pour calculatrice :
http://www.planet-casio.com/Fr/programmes/voir_un_programme_casio.php?showid=2773&page=1.
Citer : Posté le 06/02/2016 15:13 | #
En fait tu veux accéder à une variable par son nom, c'est ça ? C'est impossible. Utilise un tableau plutôt.
Citer : Posté le 06/02/2016 15:13 | #
Eh, les tableaux ça sert à ça.
Exemple rapide à adapter en fonction de tes besoins
// ——— Si tes sprites ne font pas la même taille, le mieux est de faire ceci :
char sprite_1[] = {…};
char sprite_2[] = {…};
…
char *sprites[] = {sprite_1, sprite_2, …}; // On déclare un tableau de pointeurs sur les sprites
// Y'a moyen que le SDK n'apprécie pas la déclaration via les pointeurs, si ça compile pas faut juste faire
char *sprites[10];
sprites[0] = sprite_1;
…
// —————
// Passons à la récupération des données :
// On a un tableau 2D de n lignes et p colonnes
// Parcourons-le et affichons les sprites
// Je ne gère pas le scrolling avec cet exemple, mais c'est très facilement adaptable en ajoutant une condition sur i et j, ainsi que deux variables correspondant au scroll
for(i = 0; i < n; i++) for(j = 0; j < p; j++)
ML_bmp_8_or([red]sprites[[/red] [blue]Map[ i ] [ j ][/blue] [red]][/red], j * 8, i * 8 );
// On affiche le sprite du tableau de sprites correspondant au bloc de notre tilemap
ML_display_vram();
Citer : Posté le 06/02/2016 15:45 | #
Merci beaucoup, je cherchais un moyen de contourner le problème, mais je ne cherchais pas du tout dans la bonne voie.
Je vais tester le code tout de suite !
Ajouté le 06/02/2016 à 21:49 :
Du coup, j'ai fais ça :
void afficherMap(char map){
char i;
char j;
for(i=0; i<=15; i++){
for(j=0; j<=7; j++){
switch(map){
case 1:
ML_bmp_8_or(Sprites[ Map1[ i ] [ j ]+50*gris ], j * 8, i * 8 );
break;
case 2:
ML_bmp_8_or(Sprites[ Map2[ i ] [ j ]+50*gris ], j * 8, i * 8 );
break;
}
}
}
}
Ca compile, mais j'ai ce message qui apparait 13 fois : "Illegal pointer assignement".
De plus l'add-in ne marche plus dans l'émulateur. L'add-in crash.
Notes ( logiciel qui calcule votre moyenne, basic )
Professeur Layton ( jeu d'énigme en C )
Mario & Sonic Rush ( jeu de course 3D en C )
Jetpack Joyride de Drakalex007
Arcuz de Dark Storm
Casion de Az et Darkysun
Un jeu de course en 3D pour calculatrice :
http://www.planet-casio.com/Fr/programmes/voir_un_programme_casio.php?showid=2773&page=1.
Citer : Posté le 06/02/2016 22:23 | #
N'utilise pas des char. Utilise des int. Non, ça ne permet pas d'économiser de la mémoire. Pas le moindre bit en l'occurrence.
Est-ce que tous les pointeurs que tu as utilisés sont constants ? Et pense à déclarer le tableau en const int *.
Citer : Posté le 06/02/2016 23:15 | #
Ah ouai mais non, avec cette méthode ça affiche "Should be constant" j'avais eu le même problème, et tu ne peux rien y faire, c'est dù au compilateur du SDK qui est un peu trop vieux 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 07/02/2016 08:11 | #
De toute façon ce genre de code ne compile même pas avec gcc à cause de la non-constance des pointeurs >_<
Utilisez des doubles tableaux ou bien déclarez ça hors du scope global, mais vous pouvez pas initialiser des tableaux avec des variables.
Citer : Posté le 16/02/2016 19:13 | #
J'ai un énorme problème.
J'utilise la fonction suivante : angle=atan((y0i-yObj)/(x0i-xObj)).
Or, la fonction ne me donne pas la valeur espérée.
Je me suis renseigné, et le problème vient du fait que la calculatrice fait l'arrondi à l'entier le plus proche de (y0i-yObj)/(x0i-xObj) avant de l'envoyer dans la fonction atan(). Par conséquent, je n'ai pas du tout les bonnes valeurs.
Je rencontre le même problème avec cos() et sin().
Notes ( logiciel qui calcule votre moyenne, basic )
Professeur Layton ( jeu d'énigme en C )
Mario & Sonic Rush ( jeu de course 3D en C )
Jetpack Joyride de Drakalex007
Arcuz de Dark Storm
Casion de Az et Darkysun
Un jeu de course en 3D pour calculatrice :
http://www.planet-casio.com/Fr/programmes/voir_un_programme_casio.php?showid=2773&page=1.
Citer : Posté le 16/02/2016 19:56 | #
Tu castes par double ou float