Vous avez résolu, il y a deux jours je crois mon probleme qui était un bete oubli de libération de surface. (A savoir, c'est ici )
Aujourd'hui je suis toujours sur le meme projet (un petit jeu en SDL) et j'ai besoin d'utiliser le deuxième paramètre de la fonction "SDL_BlitSurface". Comme vous le savez très certainement, c'est un SDL_Rect concernant la partie à blitter.
Jusqu'ici tout allait bien, la fonction faisait ce que je lui demandait. Mais maintenant le menu de mon jeu me permet de me rendre sur 2 parties différentes (utilisant 2 fonds différents). Dans les 2 cas j'utilise ce 2ème paramètre de la fonction de Blit. J'ai donc du aussi utiliser 2 SDL_Rect différents.
Le problème : quand le premier fond fonctionne correctement, le 2ème ne va pas et vice-versa. Celui ne fonctionnant pas est coupé comme si je mettait (en 2ème paramètre) un SDL_Rect avec x = 0 et y = 500 je dirais !
Quelqu'un pourrait-il m'en dire un peu plus sur ce deuxième paramètre ?
Salut, oui je programme en C++. De plus ces blit se trouve à l'intérieur de méthodes d'un class appelée "Fenetre".
Dans ton premier lien, il est expliqué ce que je demande et c'est exactement comment je l'ai utilisée.
De plus, c'est meme pour la meme raison faire défiler une map plus grande que l'écran. Et ca marchait parfaitement ! Mais depuis que j'ai rajouté un deuxième fond pour une partie editeur en plus de la partie jeu, la fonction se comporte très bizarrement.
switch(event.type) { case SDL_QUIT: power = false; break; case SDL_KEYUP: switch(event.key.keysym.sym) { case SDLK_KP1: jeu(fenetre); break; case SDLK_KP2: editeur(fenetre); break; } break; }
switch(event.type) { case SDL_QUIT: jeu = false; break; case SDL_KEYDOWN: switch(event.key.keysym.sym) { case SDLK_RIGHT: gimralas.deplacer(AVANT, fenetre); break; case SDLK_LEFT: gimralas.deplacer(ARRIERE, fenetre); break; case SDLK_v: fenetre.setAfficherVie(); break; } break; case SDL_KEYUP: switch(event.key.keysym.sym) { case SDLK_RIGHT: gimralas.setMove(); break; case SDLK_LEFT: gimralas.setMove(); break; case SDLK_SPACE: gimralas.sauter(fenetre); break; case SDLK_ESCAPE: jeu = false; break; } break; }
void Fenetre::afficherOption(long taille, long r, long v, long b) {
SDL_Surface* option = NULL;
option = SDL_CreateRGBSurface(SDL_HWSURFACE, 100, 100, 32, 0, 0, 0, 0);
SDL_FillRect(option, NULL, SDL_MapRGB(option->format, 220, 220, 220)); for(int i = 0 ; i < taille ; i++) { for(int j = 0 ; j < taille ; j++) {
setPixel(option, i, j, SDL_MapRGB(option->format, r, v, b));
setPixel(option, i, j, SDL_MapRGB(option->format, r, v, b));
setPixel(option, i, j, SDL_MapRGB(option->format, r, v, b));
setPixel(option, i, j, SDL_MapRGB(option->format, r, v, b)); } }
SDL_Rect position; position.x = 50; position.y = 50;
SDL_BlitSurface(option, NULL, m_ecran, &position);
SDL_FreeSurface(option); }
Donc voilà, la partie la plus interressant est la class Fenetre avec les attributs m_partieFond et m_partieEditeur !
Ce qui est bizarre c'est que si j'efface ses attributs et que je les réécris aini que les méthodes, une des 2 surfaces fonctionnera correctement et je crois que l'ordre de déclaration (mais ce serait vraiment bizarre) influence qqch ...
J'ai repéré l'ERREUR !! Ne cherchez plus : Elle est vraiment bizarre et incompréhensible du moins pour un débutant comme moi !
Voyez par vous-meme dans ce code de Fenetre.hpp:
Ca m'étonnerait... vu qu'en plus des variables déclarées après fonctionnent très bien et en plus mon jeu ne représente rien
C'est pas grave je vais passer par une autre solution.
Besoin d'un (second) petit coup de main
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Google