4Fermer6
philip-lynxLe 22/10/2010 à 16:51
Bonsoir,

J'ai réussi grâce à Fadest, à afficher le shiplayer, et il y a même un scrolling maintenant ! wink

Tout fonctionne, mais j'ai de plus en plus de messages d'erreurs, et j'ai besoin d'aide pour y remédier.

problème résolu (oubli de point virgule et oubli de déclaration du sprite 1)

Pumy

Pour ceux qui veulent tester cette version 0.1 (appui sur option1 pour démarrer):tromb Fichier joint : test.o

je remet ici les fichiers joint d'images au cas où, plus 2 nouvelles:
tromb Fichier joint : sprite1.bmp
tromb Fichier joint : sprite2.bmp
tromb Fichier joint : fond1.bmp
tromb Fichier joint : fond2.bmp

code corrigé: /* Glob Shoot - LYNX 25/10/2010 console tenu à la verticale Handy/Option/Rotate Screen(Right) D-pad et bouton option 1 LYNX-image */ #include <stdlib.h> #include <lynx.h> #include <lynxlib.h> #include "inc\fond1.pal" // Ceci sert à inclure le fichier palette généré par sprpck /* LYNX-specific #defines: */ #define JOY_RIGHT 0x10 #define JOY_LEFT 0x20 #define JOY_DOWN 0x40 #define JOY_UP 0x80 #define BUTTON_OPTION1 0x08 #define BUTTON_OPTION2 0x04 #define BUTTON_LEFT 0x02 #define BUTTON_RIGHT 0x01 #define BUTTON_PAUSE 0x01 //#define SC BSTRETC H(a) (*(uint *)((a)+15)) // déformation, macro //#define SC BTILT(a) (*(uint *)((a)+17)) // déformation, macro char SCREEN[8160] at (MEMTOP-16320); char RENDER[8160] at (MEMTOP-8160); extern char fond1[]; // ecran titre extern char fond2[]; // image decor monde 1, d'une taille de 32*102; il faudra donc scroller 6 images de droite à gauche. extern char SCB[]; #asm _SCB dc.b $c0,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef #endasm // déclaration des objets sprites qui seront linkés char sprite1[]; extern char sprite2[]; // coque (taille: 30*24) // A partir du sprite1, je souhaite obtenir 6 images, de 0 à 5, du moteur à élice : // clip du sprite 1 : lignes suivantes désactivées car bug extern char sp000000[]; extern char sp000001[]; extern char sp000002[]; extern char sp000003[]; extern char sp000004[]; extern char sp000005[]; char *sprtab[6] = {sp000000, sp000001, sp000002, sp000003, sp000004, sp000005}; extern char SCBsprite1[]; // déclaration d'un nouveau controleur de sprite, moteur à hélice extern char SCBsprite2[]; // déclaration d'un nouveau controleur de sprite, coque #asm _SCBsprite1 dc.b $c7,$10,$20 dc.w _SCBsprite2,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef _SCBsprite2 dc.b $c7,$10,$20 dc.w 0, _sprite2 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef #endasm // variable (int = 2 octets ; char = 1 octet) int posx,posy; // int i; int compteur,scrollx; char tempa,etape,tempb; // de -128 à 127 // assembler vertical retrace syncronisation routine void Vsync() { #asm vretrace: lda $fd0a bne vretrace #endasm } /************************************************************************** ** ** ** ** **************************************************************************/ char main() //main() { InitIRQ(); CLI; SetBuffers(SCREEN, RENDER ,0); /* set the palette */ SetRGB(pal); // Ceci sert à changer la palette de la Lynx (16 couleurs). DrawFBox(0,0,160,102,0); SCBX(SCB) = 0; SCBY(SCB) = 0; SCBDATA(SCB) = fond1; // coordonnées X et Y du shiplayer, moteur à hélice : SCBX(SCBsprite1) = 0; SCBY(SCBsprite1) = 0; SCBDATA(SCBsprite1) = sprite1; posx = 50; posy = 50; // coordonnées X et Y du shiplayer, coque : SCBX(SCBsprite2) = 58; SCBY(SCBsprite2) = 52; SCBDATA(SCBsprite2) = sprite2; for(;;) // boucle principale { // ********************************************************************************************* if (etape==0) // écran titre { DrawSprite(SCB); // affichage fond1 if (joystick & BUTTON_OPTION1) { etape=1; SCBDATA(SCB) = fond2; } } // ********************************************************************************************* if (etape==1) // monde 1 : affichage de 6 images pour le décors, et les 2 images du shiplayer. { ++tempb; // vitesse defilement du decor if (tempb>=2) { tempb=0; scrollx++; } if (scrollx==32) scrollx=0; // l'image fond2 : 32 pixels de large, donc remise à 0 si égale à 32. for (compteur = 0 ; compteur < 6 ; compteur++) // de 0 à 5, ce qui fait 6. Grâce à la boucle for... { SCBX(SCB) = compteur*32; // ...on incrémente la position X de chaque nouvelle image... SCBX(SCB)=SCBX(SCB)-scrollx; DrawSprite(SCB); // ... et ainsi on affiche 6 fois la même image (taille: 32*102) l'une àprès l'autre, à un intervalle de 32. } if (joystick & JOY_RIGHT) posx++; // direction Droite if (posx>120) posx=120; if (joystick & JOY_LEFT) posx--; // direction Gauche if (posx<2) posx=2; if (joystick & JOY_UP) posy--; // direction Haut if (posy<2) posy=2; if (joystick & JOY_DOWN) posy++; // direction Bas if (posy>76) posy=76; // sprite 1 du shiplayer: moteur à hélice (6 images d'une taille de 8*22 chacunes) SCBX(SCBsprite1) = posx; SCBY(SCBsprite1) = posy; // clip du sprite 1 SCBDATA(SCBsprite1) = sprtab[t%6]; ++tempa; // vitesse animation de l'hélice if (tempa>=3) { tempa=0; ++t; } // rappel: Le sprite 2 (coque) est lié au sprite 1 (hélice). SCBX(SCBsprite2) = posx+8; SCBY(SCBsprite2) = posy; DrawSprite(SCBsprite1); } // ********************************************************************************************* Vsync(); SwapBuffers(); } }