PDA

Voir la version complète : [NDS][Aide] Palib Problème


hdxs
22/03/2006, 11h32
Bonjour,

je débute à la fois en C et avec PAlib, et je souhaite faire un portage d'un jeu existant sous DOS, Atari et Amiga (un projet surement trop "grand" pour un premier essai :( )

j'ai un problème d'affichage de sprites lors de la création de mon niveau

j'ai un tableau contenant pour l'instant 2 niveaux de 16 tiles (16X16pixels) en X et 10 en Y


s32 Levels[20][16] = {

// Level 1
{0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0},
{0,0,1,2,2,2,2,2,2,2,2,2,2,1,0,0},
{0,1,2,2,2,2,2,2,2,2,2,2,2,2,1,0},
{1,2,2,2,2,2,2,0,0,2,2,2,2,2,2,1},
{1,2,2,4,2,2,0,0,0,0,2,2,3,2,2,1},
{1,2,2,2,2,2,0,0,0,0,2,2,2,2,2,1},
{1,2,2,2,2,2,2,0,0,2,2,2,2,2,2,1},
{0,1,2,2,2,2,2,2,2,2,2,2,2,2,1,0},
{0,0,1,2,2,2,2,2,2,2,2,2,2,1,0,0},
{0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0},

// Level 2
{0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0},
{0,0,1,2,2,2,2,2,2,2,2,2,2,1,0,0},
{0,1,2,2,2,0,2,2,2,2,0,2,2,2,1,0},
{1,2,0,2,2,2,0,2,2,0,2,2,2,0,2,1},
{1,2,0,3,2,2,2,0,0,2,2,2,4,0,2,1},
{1,2,0,2,2,2,2,0,0,2,2,2,2,0,2,1},
{1,2,2,2,2,2,0,2,2,0,2,2,2,2,2,1},
{0,1,2,2,2,0,2,2,2,2,0,2,2,2,1,0},
{0,0,1,2,2,2,2,2,2,2,2,2,2,1,0,0},
{0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0},

};


je l'affiche ensuite :


void LoadLevel(s32 LevelNumber) {

s32 x=0,y=0,x2=0,y2=32;
s32 i=4;

PA_ResetSpriteSys();

PA_LoadSpritePal(1,1,(void*)TileEmpty_Pal);
PA_LoadSpritePal(1,2,(void*)TileWall_Pal);
PA_LoadSpritePal(1,3,(void*)TileGround_Pal);
PA_LoadSpritePal(1,4,(void*)TileExit_Pal);
PA_LoadSpritePal(1,5,(void*)TileEnter_Pal);
PA_LoadSpritePal(1,6,(void*)Dragon_Pal);

for (x=0;x<16;x++)
for (y=0;y<10;y++)
Level[y][x]=Levels[y+10*(LevelNumber-1)][x];
for (x=0;x<16;x++) {
for (y=0;y<10;y++) {
switch(Level[y][x]) {

case 0 :
PA_CreateSprite(1,i,(void*)TileEmpty_Sprite,OBJ_SI ZE_16X16,1,1,x2,y2);
break;

case 1 :
PA_CreateSprite(1,i,(void*)TileWall_Sprite,OBJ_SIZ E_16X16,1,2,x2,y2);
break;

case 2 :
PA_CreateSprite(1,i,(void*)TileGround_Sprite,OBJ_S IZE_16X16,1,3,x2,y2);
break;

case 3 :
PA_CreateSprite(1,i,(void*)TileExit_Sprite,OBJ_SIZ E_16X16,1,4,x2,y2);
PlayerExitX=x;
PlayerExitY=y;
break;

case 4 :
PA_CreateSprite(1,i,(void*)TileEnter_Sprite,OBJ_SI ZE_16X16,1,5,x2,y2);
PlayerPositionX=x2;
PlayerPositionY=y2;
PlayerStartX=x;
PlayerStartY=y;
PlayerTileX=x;
PlayerTileY=y;
PA_CreateSprite(1,6,(void*)Dragon_Sprite,OBJ_SIZE_ 16X16,1,6,PlayerPositionX,PlayerPositionY);
break;

}

sprites[y][x]=i;

y2+=16;
i++;
}
x2+=16;
y2=32;
}

}


la compilation s'effectue sans problème mais à l'affichage je n'ai que 124 tiles qui s'affiche

quelqu'un peut-il me dépanner svp ?

merci d'avance

Bodom-Child
22/03/2006, 11h39
La DS a une limite de 128 sprites par écran, tu essaie d'en afficher 160, ça vient de là.

hdxs
22/03/2006, 12h12
merci, j'ignorais cette restriction, je vais tenter d' "économiser" des sprites

Bodom-Child
22/03/2006, 12h50
T'as l'air de t'être quand-même pas mal inspiré de mes sources, j'me trompe :lol:?

hdxs
22/03/2006, 13h04
oui j'étudie ton code pour l'adapter à mes besoins car j'ai également besoin de construire des "niveaux" et que dans la liste des projets PAlib c'est le seul projet qui avait des similitudes et que son gentil auteur a mis à disposition les sources :)

je te rassure, je me contente pas de copier-coller, j'étudie juste le language

je t'envoye via MP une url pour que tu puisses voir le code dans l'état actuel pour que tu vois que ce n'est pas une pâle copie de ton excellent Aztec Challenge

Bodom-Child
22/03/2006, 13h15
Je vais essayer ton jeu, j'te dirais quoi.

Ne t'inquiète pas hein, je disais pas ça pour te réprimander, au contraire! Si ça peut t'aider, je suis content :)