Bonjour ^^,
Dans le cadre d'un projet de réalisation de la tour de Hanoi je doit animé des disques. J'avais d'abord des problèmes à afficher les rectangle tracer sur la texture sur le render, je suis parvenu à résoudre mon problème en passant par une surface. En voulant m'amuser un peux et mettre un fond d'écran j'ai remarquer une zone de point qui n'était pas sur l'image à l'origine. J'ai finit par comprendre qu'il s’agissait en faite d'un disque que je tentais de déplacer. Cependant le disque apparait en une zone de pointiller blanc et ceux seulement si une image à été charger sur le render (si elle est supprimer avec le déplacement les point blanc apparaisse tout de même), si le render est vide on ne voit même pas le disque. Je ne comprend pas pourquoi le disque n'est pas un pavé vert comme j'aurait voulu qu'il le soit, j'avais tenter de déplacer la texture d'une zone qui est un disque vert.
Voici mon code
La zone en commentaire dans SDL_surface me permet d'avoire un fond noire mais je ne voie pas le disque à sa nouvelle position.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 SDL_Init(SDL_INIT_VIDEO); SDL_Window* Window = SDL_CreateWindow("test",SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,width,height,0); SDL_Renderer *rendere = SDL_CreateRenderer(Window,-1,SDL_RENDERER_ACCELERATED); SDL_Texture *texture = SDL_CreateTexture(rendere,SDL_PIXELFORMAT_RGBA8888,SDL_TEXTUREACCESS_TARGET,width,height); // SDL_Texture *screen = SDL_CreateTexture(rendere,SDL_PIXELFORMAT_RGBA8888,SDL_TEXTUREACCESS_TARGET,width,height); SDL_Surface *signature = /*SDL_CreateRGBSurface(0,width,height,32,0,0,0,0);*/SDL_LoadBMP("guilty_crown_1.bmp");
Merci de votre aide, je pense qu'il y a un meilleur moyen d'afficher la texture sur le render mais c'est le seul que j'ai trouver qui fonctionne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 void DrawPlater() { SDL_SetRenderDrawColor(rendere,0,255,0,SDL_ALPHA_OPAQUE); int platerWidthInital = rodewidth+(width/(2*numberOfRode+1))/2; int platerWidth = platerWidthInital-n*platerWidthInital/numberOfPlater; int xInitial = (width/(numberOfRode+1)); int yInitial = (height-20)-platerHeight; for (n=0;n<numberOfPlater;n++) { SDL_Rect plater = {xInitial-(platerWidth-n*platerWidth/numberOfPlater)/2,yInitial-n*platerHeight, (platerWidth-n*platerWidth/numberOfPlater),platerHeight}; x[n] = plater; SDL_RenderFillRect(rendere, &plater); } return; } SDL_SetRenderDrawColor(rendere,0,0,0,SDL_ALPHA_OPAQUE); //affichage de l'image texture = SDL_CreateTextureFromSurface(rendere,signature); SDL_FreeSurface(signature); SDL_RenderCopy(rendere,texture,NULL,NULL); SDL_RenderPresent(rendere); // SDL_SetRenderDrawColor(rendere,255,255,255,SDL_ALPHA_OPAQUE); DrawRodesAndBase(); SDL_SetRenderTarget(rendere,texture); DrawPlater(); SDL_Rect move = {100,100,100,platerHeight}; SDL_RenderCopy(rendere,texture,NULL,&move); SDL_RenderPresent(rendere); SDL_Delay(1000);
Edit : Les point blanc vienne du fait que ce que je déplace n'est pas un rectangle mais une partie de la texture j'ai réssayer avec "&x[1]" à la place de texture à la ligne 33 mais rien n'apparait
Partager