![]() |
|
![]() |
![]() |
![]() |
![]() |
![]() |
Ouvrir sur le forum | Recherche | Messages du jour | Marquer les forums comme lus |
Divers Tout ce qui ne correspond pas aux autres sous-forums mais qui concerne le développement amateur sur Nintendo DS |
Publicité |
![]() |
|
Outils de la discussion | Modes d'affichage |
![]() |
#1 |
Membre
Date d'inscription: 17/10/2011
Messages: 9
|
![]() Bonsoir,
je vous écrit car j'ai un problème et que je ne trouve pas de solution. Ce que je voudrais faire est un jeu de plateformes avec du scrolling vertical (on scroll que en y), il est simple de le faire comme dans les exemples fournis avec PAlib avec une carte énorme sauf que moi, je veux me servir de tiles pour construire ma carte. En gros j'ai une seule image (un tileset) qui contient tous mes tiles, j'ai un tableau 2D avec des identifiants qui me permet de savoir quoi mapper selon le numéro de la case. Si je n'ai pas de scrolling, il y a aucun probleme ça marche bien en utilisant la fonction PA_SetMapTile. Le problème c'est que j'aimerais un scrolling automatique qui bouge quand la personne se déplace en bas ou en haut, du coup il me faut un vrai scrolling. Pour ceci, j'ai converti mon tileset avec PAGfx en tant que EasyBG (j'utilise la derniere version de PAlib), au début en chargeant mon tileset de la taille de l'écran ds (256*192), le problème est que rien ne s'affichait sur l'écran. J'ai compris qu'il fallait mettre une image + grande pour l'afficher, du coup j'ai garder mon tileset et j'ai juste agrandi la hauteur de l'image *3 en remplissant le reste en magenta. Cette fois ça s'affiche ! Par contre, lorsque je dessine plusieurs tiles sur la hauteur, j'ai testé en dessinant juste 4 tiles (de 24*24) donc 15 tiles de 8*8 Ã* partir de y=24 (en nb de tile), jusqu'Ã* y=38 pour mon 4eme tile. Resultat, en scrollant en y , je peux en voir que 2 et un bout du 3eme, ensuite ça revient Ã* l'écran que j'avais au début... Quel est le probleme? Que puis je faire pour résoudre ceci? p.s : j'ai utilisé PA_SetLargeMapTile, ça ne change rien. Merci d'avance Nico Dernière modification par seloxx ; 22/11/2011 à 18h17. |
![]() |
![]() |
Publicité |
![]() |
#2 |
Membre
Date d'inscription: 17/10/2011
Messages: 9
|
![]() Pour essayer d'être plus clair :
Voici une partie de mon code : Ne faites pas attention, c'est un peu sale car c'est juste du test pour l'instant Code:
// map du level 1 int level1[12][10]={{0,0,1,1,1,2,3,0,0,0}, {0,1,6,0,1,0,3,3,0,0}, {0,1,0,0,1,0,0,1,0,0}, {0,1,1,1,1,1,1,1,0,0}, {0,1,0,0,1,0,0,1,0,0}, {0,4,4,0,1,0,5,1,0,0}, {0,0,4,2,1,1,1,0,0,0}, {0,0,1,1,1,1,1,1,1,0}, {0,0,1,1,1,1,1,1,1,0}, {0,0,1,1,1,1,1,1,1,0}, {0,0,1,1,1,1,1,1,1,0}, {0,0,1,1,1,1,1,1,1,0}}; // numéro des tiles de chaque composant graphique int numtiles_sol[9]={1,2,3,19,20,21,37,38,39}; int numtiles_cle[9]={4,5,6,22,23,24,40,41,42}; int numtiles_jaune[9]={7,8,9,25,26,27,43,44,45}; int numtiles_rouge[9]={10,11,12,28,29,30,46,47,48}; int cd_rouge[9]={13,14,15,31,32,33,49,50,51}; int cd_jaune[9]={16,17,18,34,35,36,52,53,54}; // dessine un tile void draw_tile(int tilex,int tiley,int numtiles[9]) { int i,j,k=0; for(i=tiley;i<tiley+3;i++) { for(j=tilex;j<tilex+3;j++) { PA_SetLargeMapTile(0,2,j,i,numtiles[k++]); } } } // applique tous les tiles de transparence void reset_map() { int i,j; // On mets tous les tiles en transparent for(i=0;i<32;i++) for(j=0;j<36;j++) // 36/3 = pour 12 tiles en hauteur PA_SetMapTileAll(0,2,j,i,0); } // dessine la map void draw_map() { int i,j; reset_map(); for(i=0;i<12;i++) // pour 12 tiles en hauteur { for(j=0;j<10;j++) { if(level1[i][j]==1) draw_tile(1+(j*3),i*3,numtiles_sol); // tilex=1+(j*3) car on laisse un tile d'espace sur la gauche (8pixels) j*3 car nos tiles font 24pixels else if(level1[i][j]==2) draw_tile(1+(j*3),i*3,numtiles_cle); else if(level1[i][j]==3) draw_tile(1+(j*3),i*3,numtiles_jaune); else if(level1[i][j]==4) draw_tile(1+(j*3),i*3,numtiles_rouge); else if(level1[i][j]==5) draw_tile(1+(j*3),i*3,cd_rouge); else if(level1[i][j]==6) draw_tile(1+(j*3),i*3,cd_jaune); } } } int main(){ PA_Init(); PA_InitText(1,0); int spriteX=152,spriteY=120; int scrolly=0; // charge le fond et le tileset PA_LoadBackground(0,2,&tileset2); // charge le sprite PA_LoadSpritePal(0,0,(void*)sprite0_Pal); // creer le sprite PA_CreateSprite(0,0,(void*)sprite0_Sprite,OBJ_SIZE_16X16,1,0,spriteX,spriteY); draw_map(); while(true){ PA_WaitForVBL(); if(scrolly<0) scrolly=0; if(scrolly>1024) scrolly=1024; PA_SetSpriteXY(0,0,spriteX,spriteY); PA_EasyBgScrollY(0,2,scrolly); // gestion croix directionelle if(Pad.Held.Up) { //if((getTile(spriteX,spriteY-8)!=0) && spriteY>0) // Si le tile au dessus est un tile sol ou si c'est la limite de l'écran, on ne peut plus avancer (il y a collision) spriteY--; scrolly--; } if(Pad.Held.Down) { // if((getTile(spriteX,spriteY+8)!=0)) //&& spriteY<191) spriteY++; scrolly++; } if(Pad.Held.Left) { //if(getTile(spriteX-8,spriteY)!=0 && spriteX<255) spriteX--; } if(Pad.Held.Right) { //if(getTile(spriteX+8,spriteY)!=0 && spriteX>0) spriteX++; } PA_WaitForVBL(); } } |
![]() |
![]() |
![]() |
#3 |
Membre confirmé
|
![]() Autant que je me rappelle, je n'avais pas réussi moi non plus Ã* changer les tiles d'une map et la scroller.
A chaque fois, le scroll me remettait les tiles d'origine :/ Autant sur une map normal (32*24, écran complet donc), pas de soucis. Autant sur du scroll, pas de succès :/ J'espère que quelqu'un pourra te répondre ![]() |
![]() |
![]() |
![]() |
#4 |
Membre confirmé
Date d'inscription: 20/11/2007
Localisation: Maubeuge (59)
Messages: 223
|
![]() tu peux me montrer ton tileset ? Mais si je comprends bien, tu as un tableau pour ta map qui est de 32*96 alors que la DS en affiche 32*24, ton perso avance de 8 pixels (1 tile Ã* la fois) et tu veux que la map scrolle en y ?
|
![]() |
![]() |
![]() |
#5 |
Membre
Date d'inscription: 17/10/2011
Messages: 9
|
![]() salut,
mon tileset : http://img546.imageshack.us/img546/9743/tileset2.png Tu as tout compris Ã* part que mon perso n'avance que d'un pixel Ã* la fois, mais oui j'aimerais scroller en y pour pouvoir afficher le reste de ma map quand le perso descend |
![]() |
![]() |
![]() |
#6 |
Membre confirmé
Date d'inscription: 20/11/2007
Localisation: Maubeuge (59)
Messages: 223
|
![]() Il me semble qu'un tileset sur DS c'est 256*256, ensuite si tu utilises la dernière version de Palib en théorie tu dois avoir un problème avec tes tiles car palib saute maintenant les espaces blanc.
C'est Ã* dire que dans le numérotation des tiles, au lieu d'avoir : 01_34 5_789 Nous avons : 01___ 23_45 Bref si tu me suis pas c'est que tu n'utilises pas la dernière version de Palib. Pour ton soucis, malheureusement ce n'est pas possible avec Palib. Il faut bien comprendre que si tu travailles avec des tiles, tu te retrouves dans un tableau 32*24 et tu ne peux les déplacer au pixel près, par exemple le tile 3 restera toujours aux coordonnées y = 0 et x = 24. Je te propose de changer de méthode en utilisant les deux écrans, afin d'utiliser deux tableaux de 32*24 (32*48), la moitié de 32*96. Ce qui te permettra de charger la seconde moitié de ta map en tiles lorsque t'on personnage arrivera tout en bas de l'écran du bas en mettant une petite transition. |
![]() |
![]() |
![]() |
Liens sociaux |
Publicité |
Utilisateurs regardant la discussion actuelle : 1 (0 membre(s) et 1 invité(s)) | |
Outils de la discussion | |
Modes d'affichage | |
|
|
![]() |
||||
Discussion | Auteur | Forum | Réponses | Dernier message |
![]() |
severum | Aide au développement | 3 | 19/03/2011 12h08 |
![]() |
thibb-76200 | Linkers M3/R4 | 4 | 12/12/2010 19h23 |
![]() |
M@cZér0 | Articles et Tutos | 81 | 22/04/2009 09h28 |
![]() |
Jocker | Aide au développement | 5 | 01/11/2007 22h14 |
Contrôler une caméra et/ou robot Ã* distance avec une DS ? | Matronix | [NDS] Divers | 12 | 28/10/2007 22h41 |