J'ai compris comment chainés les sprites
Maintenant, je me demande si ma méthode, pour cloner romeo, ne pourrai être amélioré ?
exe :
Fichier joint : romeo02.o
/*
Clonage/liste chainée version 0.2 - LYNX
04/11/2010
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_INNER 0x02
#define BUTTON_OUTER 0x01
#define BUTTON_PAUSE 0x01
char SCREEN[8160] at (MEMTOP-16320);
char RENDER[8160] at (MEMTOP-8160);
// ------------------------------------
extern char fond1[];
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
// ------------------------------------
//char romeo[]; //
extern char om000000[];
extern char om000001[];
extern char om000002[];
extern char om000003[];
extern char om000004[];
extern char om000005[];
char *romeotab[6] = {om000000, om000001, om000002, om000003, om000004, om000005};
char SCBromeo[]; // déclaration d'un nouveau controleur de sprite
char SCBromeo2[]; // déclaration d'un nouveau controleur de sprite
char SCBromeo3[]; // déclaration d'un nouveau controleur de sprite
#asm
_SCBromeo dc.b $c7,$10,$20
dc.w 0,0
dc.w 0,0,$100,$100
dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
;
_SCBromeo2 dc.b $c7,$10,$20
dc.w 0,0
dc.w 0,0,$100,$100
dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
;
_SCBromeo3 dc.b $c7,$10,$20
dc.w 0,0
dc.w 0,0,$100,$100
dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
#endasm
// ------------------------------------
int posx,posy;
int i;
int tempa,aromeo,drap1;
// assembler vertical retrace syncronisation routine
void Vsync()
{
#asm
vretrace:
lda $fd0a
bne vretrace
#endasm
}
/**************************************************************************
** **
** **
**************************************************************************/
char main()
{
InitIRQ();
CLI;
SetBuffers(SCREEN, RENDER ,0);
/* set the palette */
SetRGB(pal); // Ceci sert à changer la palette de la Lynx.
//DrawFBox(0,0,160,102,0);
SCBX(SCB) = 0;
SCBY(SCB) = 0;
SCBDATA(SCB) = fond1;
SCBNEXT(SCB) = SCBromeo; // chainage de sprite
SCBX(SCBromeo) = 0;
SCBY(SCBromeo) = 0;
SCBDATA(SCBromeo) = romeotab[0%6];
SCBNEXT(SCBromeo) = SCBromeo2; // chainage de sprite
SCBX(SCBromeo2) = 52;
SCBY(SCBromeo2) = 26;
SCBDATA(SCBromeo2) = romeotab[0%6];
SCBNEXT(SCBromeo2) = SCBromeo3; // chainage de sprite
SCBX(SCBromeo3) = 104;
SCBY(SCBromeo3) = 52;
SCBDATA(SCBromeo3) = romeotab[0%6];
/**************************************************************************
** BOUCLE PRINCIPALE **
**************************************************************************/
for( ; ; )
{
// position X et Y du grand sprite pour le fond :
SCBX(SCB) = posx;
SCBY(SCB) = posy;
if (joystick & JOY_RIGHT) // direction Droite
posx++;
if (joystick & JOY_LEFT) // direction Gauche
posx--;
if (joystick & JOY_UP) // direction Haut
posy--;
if (joystick & JOY_DOWN) // direction Bas
posy++;
if (posx<-160) posx=-160; // limit va à gauche
if (posx>0) posx=0; // limit va à gauche
if (posy>0) posy=0; // limit haut
if (posy<-102) posy=-102; // limit bas
// animation de romeo
if (drap1==0)
{
++tempa; // animation de romeo
if (tempa>40) {drap1=1;tempa=0;}
}
if (drap1==1)
{
++tempa; // animation de romeo
if (tempa>10)
{
tempa=0;++aromeo;
if (aromeo>5) {aromeo=0;drap1=0;}
}
}
// romeo 1 :
SCBX(SCBromeo) = 0;
SCBY(SCBromeo) = 0;
SCBDATA(SCBromeo) = romeotab[aromeo%6];
// romeo 2 :
SCBX(SCBromeo2) = 52;
SCBY(SCBromeo2) = 26;
SCBDATA(SCBromeo2) = romeotab[aromeo%6];
// romeo 3 :
SCBX(SCBromeo3) = 104;
SCBY(SCBromeo3) = 52;
SCBDATA(SCBromeo3) = romeotab[aromeo%6];
// Affichage des sprites chainé:
DrawSprite(SCB);
Vsync();
SwapBuffers();
}
/**************************************************************************
** FIN de la BOUCLE PRINCIPALE **
**************************************************************************/
}