Bonjour,
SVP, je voudrais savoir, s’il existe une fonction en SDL, qui permet d’effacer (ou rendre transparente) une image, grâce à ces coordonnes (non pas à son pointeur).
Merci
Version imprimable
Bonjour,
SVP, je voudrais savoir, s’il existe une fonction en SDL, qui permet d’effacer (ou rendre transparente) une image, grâce à ces coordonnes (non pas à son pointeur).
Merci
Je ne comprends pas trop ce que tu veux faire mais SDL_FillRect permet de remplacer les pixels par une couleur fixe.Citation:
Envoyé par MrMust
Sinon, il faudra être plus explicite dans ce que tu recherches,
Jc
Par exemple, j’ai une image de fond et je lui ajoute une deuxième image. Est-ce que c’est possible d’effacer la deuxième image (sans altérer la premier) juste avec les coordonnées de la deuxième image. J’espère que c’est clair.
Merci pour votre réponse ;)
Je ne comprends pas : avec SDL tu affiches l'image de fond puis tu copies la 2ième image sur l'image de fond .
Les n images sont copiées vers la "surface"principale de l'écran avec SDL_BlitSurface
C'est la technique du "back-buffer" ou "Double Buffer" regarder les tutoriels sur SDL
http://jeux.developpez.com/faq/sdl/?...uble_buffering
En effet... La solution est de copier l'image de fond sur la surface gérant l'écran (celle retournée par SDL_SetVideoMode) à chaque itération et tu copies ta 2ème image au-dessus après.Citation:
Envoyé par Mat.M
Du coup, à chaque itération, ta première image n'est pas touchée...
Jc
Mon problème est plus compliquer que cela. Je dois retire une image (x) de l’écran, après avoir insère plusieurs.
Mais après avoir insérer l’image je n’ai plus que ces coordonnes (en pixel).
Donc c’est pour cela que je demande est ce qu’il existe une fonction permettant de faire cela, comme par exemple « SDL_SetAlpha(P, SDL_SRCALPHA, 0); » avec P le pointeur ver l’image. Mais la fonction SDL_SetAlpha elle a besoin du pointeur « P », alors que moi l’unique information que j’ai de mon image est, ces coordonnes.
Mais sur le fond, c'est une image ou un fond uni?
Si tu copies (via SDL_BlitSurface) une surface sur une autre, alors la deuxième se modifie mais ne garde pas le fond qu'elle avait avant en-dessous.
Le moyen, si tu veux éviter ce problème (par exemple un bonhomme se déplace sur un fond imagé), c'est de stocker le fond sur une surface, le bonhome dans une autre et à chaque fois de les copier toutes les deux sur l'écran:
Et comme ca ton bonhomme se déplace sur le fond imagé sans avoir besoin de recharger le fond, car on ne copie pas directement le bonhomme sur le fond.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 #include <SDL/SDL.h> int main(int argc, char **argv) { SDL_Surface *ecran, *fond, *bonhomme; SDL_Rect posBonhomme; SDL_Init(); ecran = SDL_SetVideoMode(640, 480, 32, SD_DOUBLEBUF|SDL_HWSURFACE); .... //dedans on peut changer la pos du bonhomme et charger les surfaces //affichage SDL_BlitSurface(fond, NULL, ecran, NULL); SDL_BlitSurface(bonhomme, NULL, ecran, &posBonhomme); SDL_Flip(ecran); ... }
Par contre si tu as un fond uni, alors tu peux y mettre un rectangle de mêmes coordonnées que l'image et de même couleur que l'écran et le copier, ce qui effacera définitivement l'image.
Merci mais mon problème est un peu différent,
Je dois crée un jeu, dans le jeu j’ai une image de fond, et chaque fois qu’on clique sur des endroits spécifier il y a insertion d’un pion, c'est-à-dire une autre image ce colle sur mon fond,
A des cas bien spécifier, je dois enlevé l’une des images coller pressedament.
J’ai trouver deux solution la premier comme tu a die coller un boue d’image sur le pion a enlevé.
Deuxième solution recoller tout sauf l’image que je veux enlevé.
Les deux solutions sont un peu fastidieuses pour moi, car j’ai un fond changeable, et pour la deuxième solution, la complexité du programme sera grande.
Donc ce que je veux, c’est de savoir est ce qu’il y a une autre solution.
Merci bk pour vos réponses ;)
Encore une fois, classiquement, tu dois dessiner une image de fond et utiliser une structure de données pour te dire quelles sont les endroits occupés.
Ensuite, à chaque image, tu mets l'image de fond et tu traverses ta structure pour afficher tes pions...
Jc
Tu viens de me faire penser à quelque chose!!!
Tu as toujours une surface qui contient le fond intact? Tu peux faire un SDL_Blit comme ca:
Comme ca tu recolles exactement le même morceau de fond que tu as besoin.Code:
1
2
3
4 //r contient les coordonnées de l'images et ses dims. SDL_BlitSurface(fond, &r, ecran, &r);
Edit: Sinon, pour répondre à ta question, il n'y a pas de moyen de reprendre une surface d'avant, à partir d'une surface. Ca ne garde pas les traces des opérations qu'on y fait, et ce n'est qu'un tableau de pixels avec d'autres infos.
Merci pour vos réponse,
je vais essayer avec le Blit que tu ma montré.
Sinon je serai obliger de créé une structure de donné.
Encor merci
pour le problème posé je conseillerais de faire une liste d'image : par exemple std::list<SDL_Surface> ou bien avec std::vector ( ce serait même mieux avec std::vector )Citation:
Envoyé par MrMust
Comme cela tu peux mémoriser l'index des images et retirer des images au besoin