Bonjour à tous,
Merci de prendre la peine de lire mon petit problème de noob.
Je débute mon apprentissage de la SDL. Pour cela je m'appuie (entre autre) sur une série de tutoriels très bien fait mais, le problème c'est qu'ils sont réalisés autour de la 1.2.
J'adapte donc le travail en 2.0.
Jusqu'ici, ça ne m'a pas posé de problème.
Aujourd'hui, je n'arrive pas à adapter un bout de code qui (fonctionnant très bien en 1.2 bien sur) réalise le "scrolling" d'un rect (SDL_Rect) sur une SDL_Surface de taille 960/720
dans une fenêtre(une autre surface) qui a pour taille la moitié de la première surface.
le code réalise un effet de scrolling (enfin un déplacement) dans une fenêtre plus petite que la taille réelle de la surface grâce à un rect mobile (aux dimensions de la fenêtre) qui met à jour
ses coordonnées à chaque fois qu'on utilise une des touches du clavier.
Donc en appuyant sur une flèche du clavier, on fait évoluer le rectangle de gauche à droite et de bas en haut.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 // rect a pour taille la taille de display // Le rect change de coordonnées à chaque fois qu'on le met à jour par un event // SDLK_DOWN SDLK_UP ... // ulc = upper left corner rect->x = ulc_x; rect->y = ulc_y //taille de mypic = 2 * taille display SDL_BlitSurface (mypic, rect, display, NULL);
Problème:
Comment réaliser ça avec la 2.0, sachant que je travaille sur des textures et que blit a disparu?
J'ai bien essayé de faire comme ceci:
Voici une partie du code:
Mais à l'affichage, ça me donne une "texture" qui s'est adaptée aux dimensions de la fenêtre alors que les dimensions de la texture font de base 2 fois celles de la fenêtre!
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 #define WIN_W 480 #define WIN_H 360 ulc_x = ulc_y = 0; rect.w = WIN_W; rect.h = WIN_H; rect.x = ulc_x; rect.y = ulc_y; // Je créé une image, une fenêtre d'affichage et un rect aux mêmes dimensions // L'image que je créée est ensuite placée dans une SDL_Surface I = image_create(WIN_W, WIN_H, 0xFF7F00FF); mypic = image_to_SDL_Surface(I); display = window_init("test", WIN_W, WIN_H); // Je créé une texture qui fait 2 fois les dimensions de l'affichage sdlTexture = SDL_CreateTexture(sdlRenderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_STATIC, WIN_W*2, WIN_H*2); // je mets bien à jour la texture avec rect SDL_UpdateTexture(sdlTexture, rect, mypic->pixels, mypic->pitch); SDL_RenderClear(sdlRenderer); SDL_RenderCopy(sdlRenderer, sdlTexture, rect, NULL); SDL_RenderPresent(sdlRenderer);
Donc toute mon image est affichée dans la fenêtre alors que je ne devrais voir qu'une partie de l'image (comme dans la v1.2)!
Mais comme on ne travaille plus seulement avec des "surfaces" et que "blit" a disparu, je me mélange les pinceaux. Donc je pige pas!
Si quelqu'un peut me venir en aide, ce sera bien sympathique,
encore merci pour votre patience.
Partager