:: PlayerAdvance.org ::  

Précédent   :: PlayerAdvance.org :: > :: Développement Amateur :: > Nintendo DS > Divers

Divers Tout ce qui ne correspond pas aux autres sous-forums mais qui concerne le développement amateur sur Nintendo DS

Publicité

Réponse
 
Outils de la discussion Modes d'affichage
Vieux 22/11/2011, 04h37   #1
seloxx
Membre
 
Date d'inscription: 17/10/2011
Messages: 9
Par défaut Problème avec le scrolling !!

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.
seloxx est déconnecté   Réponse avec citation

Publicité

Vieux 22/11/2011, 18h12   #2
seloxx
Membre
 
Date d'inscription: 17/10/2011
Messages: 9
Par défaut

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();
  }
}
Mon tileset fait 256*768 pixels
seloxx est déconnecté   Réponse avec citation
Vieux 22/11/2011, 21h10   #3
t4ils
Membre confirmé
 
Date d'inscription: 10/11/2005
Localisation: Morangis ( 91 )
Messages: 2 754
Voir les codes amis Wii
Par défaut

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
__________________
Un renard, en plus de voler, ca code !

t4ils est déconnecté   Réponse avec citation
Vieux 23/11/2011, 19h24   #4
Cid2Mizard
Membre confirmé
 
Date d'inscription: 20/11/2007
Localisation: Maubeuge (59)
Messages: 223
Par défaut

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 ?
__________________
www.nintendomax.com
Nintendomax.com 100% hack - 0% warez
Cid2Mizard est déconnecté   Réponse avec citation
Vieux 23/11/2011, 21h52   #5
seloxx
Membre
 
Date d'inscription: 17/10/2011
Messages: 9
Par défaut

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
seloxx est déconnecté   Réponse avec citation
Vieux 23/11/2011, 23h11   #6
Cid2Mizard
Membre confirmé
 
Date d'inscription: 20/11/2007
Localisation: Maubeuge (59)
Messages: 223
Par défaut

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.
__________________
www.nintendomax.com
Nintendomax.com 100% hack - 0% warez
Cid2Mizard est déconnecté   Réponse avec citation
Réponse

Liens sociaux

Publicité



Utilisateurs regardant la discussion actuelle : 1 (0 membre(s) et 1 invité(s))
 
Outils de la discussion
Modes d'affichage

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Navigation rapide

Discussions similaires
Discussion Auteur Forum Réponses Dernier message
NDS Problème avec font personnalisé severum Aide au développement 3 19/03/2011 12h08
NDS Etrange problème avec ma R4 SDHC... thibb-76200 Linkers M3/R4 4 12/12/2010 19h23
NDS [Tuto - Matériel] Guide d'achat des Linkers DS M@cZér0 Articles et Tutos 81 22/04/2009 09h28
NDS Scrolling Bg avec stylet. 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


Fuseau horaire GMT +2. Il est actuellement 09h04.


Édité par : vBulletin® version 3.7.2
Copyright ©2000 - 2023, Jelsoft Enterprises Ltd. Tous droits réservés.
Version française #16 par l'association vBulletin francophone
Design par Ass-Itch, DJP et Dr.Vince