valor negativo para SDL_Rect->y

Tratamos sobre el manejo de APIs frecuentemente utilizadas en el desarrollo de videojuegos, como SDL, pygame o SFML.

valor negativo para SDL_Rect->y

Notapor rbidegain » Vie May 08, 2009 4:29 pm

Estoy con problemas para setear la variable "y" de la estructura SDL_Rect.

En realidad el problema es que después que llamo a SDL_BlitSurface se modifica el valor de la variable "y"

estoy probando este código

img_larga.y = -800;
fprintf(stderr, "%d -\n", img_larga1.y); //imprime -800
SDL_BlitSurface(imagen, NULL, pantalla, &img_larga);
fprintf(stderr, "%d\n", img_larga.y); //imprime 0

estoy trabajando en linux con sdl version 1.2.12

lo que estoy intentando hacer es que la imagen surga de la parte de arriba de la pantalla y vaya bajando.

desde ya muchas gracias
rbidegain
 
Mensajes: 3
Registrado: Vie May 08, 2009 4:07 pm

Notapor hugoruscitti » Vie May 08, 2009 6:49 pm

Si, es un comportamiento normal. Resulta
que la función SDL_BlitSurface modifica el cuarto argumento
para indicarle al programador qué parte del rectángulo se
utilizó en la impresión.

En este caso, aunque tu variable "y" tenga ese valor, luego
de imprimir SDL reporta que imprimió solo desde y > 0 y por
ello cambia el valor de la coordenada "y".

Puedes ver una detalle de este comportamiento en la documentación
de SDL:

http://sdl.beuc.net/sdl.wiki/SDL_BlitSurface
Avatar de Usuario
hugoruscitti
Site Admin
 
Mensajes: 1242
Registrado: Dom Jul 30, 2006 3:57 am
Ubicación: Buenos Aires, Argentina

Notapor rbidegain » Sab May 09, 2009 4:27 pm

Gracias por la respuesta Hugo.

me sirvió para implementar la solución de otra manera

antes intentaba
img_larga.y + = 10;

ahora utilizo una variable global (probablemente luego utilice una local estatica)
que la uso así

igValor_y +=10;
img_larga.y = igValor_y;

y entonces si llamo a

SDL_BlitSurface(imagen, NULL, pantalla, &img_larga);


saludos!
rbidegain
 
Mensajes: 3
Registrado: Vie May 08, 2009 4:07 pm

Notapor hugoruscitti » Dom May 10, 2009 1:11 am

Si, está buena la solución.

Otra forma puede ser crear un rectangulo auxiliar con las coordenadas
de impresión que necesita la función:

Código: Seleccionar todo
SDL_Rect destino = {img_larga.x, img_larga.y, 0, 0};

SDL_BlitSurface(imagen, NULL, pantalla, &destino);


así la función de SDL no altera tu rectángulo original (img_larga).
Avatar de Usuario
hugoruscitti
Site Admin
 
Mensajes: 1242
Registrado: Dom Jul 30, 2006 3:57 am
Ubicación: Buenos Aires, Argentina


Volver a Sobre las bibliotecas multimedia

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados

cron