begin process at 2012 05 29 02:15:47
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Graphique

 > 

[C/C++][SDL]affichage de plusieur ssprites


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

[C/C++][SDL]affichage de plusieur ssprites

dimanche 26 mars 2006 à 23:30:12 | [C/C++][SDL]affichage de plusieur ssprites

madink

salut ,

je sais pas vraiment si c' est le bon forum , ou si quelqun de gentil peut me répondre mais je poste quand meme

Alors pour un projet info je fait un pacman , j' utilise la librairie SDL pour l affichage .J' arrive a afficher un ligne ou une colone de la map ( les mur) mais je ne peut pas afficher la deuxieme elle fait planter le programme


Mes sprite font 32*32 pixel .
Ma map est defini par un tableau d' entier a deux dimention map[19][19] quand il est egal a 1 il y a un mur quand =0 c' est vide


Voici ma fonction d' affichage:






SDL_Rect rect_aff;
SDL_Surface *Screen, *image ,*mur;

// fonction qui affiche le pacman en XY et affiche les mur
void affichage(int X,int Y)
{
int x,y,a,b,A,B;
x=32*X;
y=32*Y;


   // Coloration de la surfaces de pacman
   SDL_FillRect(Screen, NULL, 0);

   // Définition de la zone à l'écran du pacman
rect_aff.x = x;
rect_aff.y = y;

   // Blit de la surface du pakman  à l'écran
SDL_BlitSurface(image,NULL,Screen,&rect_aff);


mur = SDL_LoadBMP("./brik.bmp");
        
a=-1;
b=-1;          

do{a=a+1   //balayage du tableau
      do {b=b+1;
               if(map[a][b]==1)
        
             {
            A=32*a;      //passage des coordonner du pixel a ceux du sprite
            B=32*b;                                                              
             rect_aff.x = B;
             rect_aff.y = A ;
             SDL_BlitSurface(mur,NULL,Screen,&rect_aff);
              }
         }        
         while (b!=19);}
   while (b!=19);


  
   SDL_Flip(Screen); //affichage
}



je pense qu' il doit y avoir une limite au nombre de surface que l on peut remplir car le pacman s' affiche parfaitement , et si je n' affiche qu' une
seul ligne ou une seule colone ( une seul boucle do while) alors cela marche ...
voila , si quelqun a une petite idée je serait vraiment heureux smile.gif
merci d' avance .
lundi 27 mars 2006 à 00:36:42 | Re : [C/C++][SDL]affichage de plusieur ssprites

MrdJack

Réponse acceptée !
salut madink,
ton probleme est tres simple, apparament tu as bien compris qu'un tableau commence à 0 puisque tu commence ta boucle avec a = b = 0. mais il faut en tenir compte jusqu'au bout : while(a!=19);  dans ce cas, map[19][0] n'existe pas. c'est pour celà que tu arrives a tracer la premiere colonne mais que ca plante avant de commencer la deuxieme. si tu avais inversé la priorité des deux boucles (tracer ligne par ligne et non col par col) tu aurais ta map entiere mais avec la meme erreur a la fin.

bon pour arranger ca, il suffit de remplacer 19 par 18 pour avoir les 19 valeurs de 0 à 18.
avec ça, ca devrait fonctionner mieux.

mais une autre suggestion : afin de rendre le code plus comprehensible bien qu'il ne soit pas compliqué, je te suggere dans ce cas d'utiliser des boucles for().
voici ton code en amélioré :

int map[19][19];
SDL_Rect rect_aff;
SDL_Surface *Screen, *image ,*mur; // image n'est pas utilisée ici...
mur = SDL_LoadBMP("./brik.bmp"); // il est preferable de charger mur au debut du programme car là ou tu l'avais mis, il etait rechargé a chaque appel de la fonction (pas tres rapide)

void affichage(int x,int x)
{
    SDL_FillRect(Screen, NULL, 0);
    rect_aff.x = 32*x; // de cette maniere, on economise deux variables
    rect_aff.y = 32*y;
    SDL_BlitSurface(image,NULL,Screen,&rect_aff);
    for(int a=0; a<=18; a++) {//format de for() : for(initialisation; condition de rebouclage; action a effectuer a chaque rebouclage) { ... }
        for(int b=0; b<=18; b++){ // b++ equivaut à b=b+1 de meme que b-- ou b+=2 equivaut à b = b+2 ou b-=2, b*=5, b/=5, b%=5 etc.... ce sont des opérateurs de base permettant d'alléger le code !
            if(map[a][b]==1){
                rect_aff.x = 32*b;// idem, de cette maniere, on economise deux variables
                rect_aff.y = 32*a ;
                SDL_BlitSurface(mur,NULL,Screen,&rect_aff);
            }
        }
    }
    SDL_Flip(Screen); //affichage
}
autre chose : n'oublies pas d'initialiser ta video en hardware et doublebuf

si tu as d'autres question n'hesites pas !

@++
lundi 27 mars 2006 à 01:01:25 | Re : [C/C++][SDL]affichage de plusieur ssprites

madink

un énorme merci , j' ai encore quelque probleme mais la je commence a voir le boue du tunnel :)

merci encore !


Cette discussion est classée dans : affichage, rect, sdl, aff, mur


Répondre à ce message

Sujets en rapport avec ce message

Blit de surface avec SDL [problème d'affichage] [ par cyberlewis ] Bonjour,Voilà j'ai fait un code (jeu vidéo SDL),j'arrive à afficher la partie que je veux (tiles, tiles.bmp) dans screen qui est affichée à l'écran, p Accelération affichage image bitmap [ par corben dallas ] Bonjour à tous,Mon problème est le suivant: je cherche à afficher un flux vidéo constitué d'images bitmap dans une fenêtre. Mon code est le suivant:dc SDL pb d'affichage en plein écran avec SDL_HWSURFACE [ par jfleouf ] Bonjour tout le monde,j'ai un petit pb d'affichage dans mon appli SDL.J'utilise la technique de la surface temporaire comme décrit ici : http://jihane (SDL) Affichage d'une map = plantage [ par MRick571 ] Bonjour j'essai de coder un petit moteur 2d pour afficher une map RPG mon code est constituer comme cela :CObjet||----CTile||----CSpriteJ'initialise u probleme de compilation SDL [ par darmoor ] Je suis dsl , le sujet doit etre souvent demandé mais j'ai deja cherché sur google et j'ai pas encore trouvé ce qu'il faut. Bon alors j'ai commencé a SDL : linker error [ par bigben89 ] Ca fais à peine quelques mois que j'fais de la programmation (en C) et j'aimerais faire un peu de 2d et de 3d avec SDL. Je regarde des tutoriaux sur Affichage d'un fond + de petits tiles avec SDL [ par cyberlewis ] Slt à tous,Qui peut m'aider la dessus svp ?Vla j'ai un blem, j'arrive afficher une image de fond avec SDL,et aussi un tile, même plusieurs ...Mais j'a Affichage de texte avec OpenGL et SDL sans SDL_ttf [ par asmanur ] Voilà je cherche à faire un code le plus portable possible e j'aimerais afficher du texte dans une fenetre SDL & OpenGL seulement voila SD_ttf ne fonc Affichage de texte avec SDL [ par nightlord666 ] Bonjour ! J'aimerais savoir comment je peut afficher du texte en n'utilisant que SDL. Est-on obligé de créer un fichier contenant la texture ou y a t- Problème avec SDL_SetColorKey [ par The_Sin ] Voici mon code : #include SDL_Surface * sEcran ; SDL_Surface * sImage ; void init() {     SDL_Init(SDL_INIT_VIDEO) ;     sEcran = SDL_SetVideoM


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,374 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales