Problemas con valores negativos

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

Problemas con valores negativos

Notapor leonel06033 » Lun Nov 23, 2009 7:22 pm

Hola amigos:

Bueno, ahora estoy haciendo una prueba, donde el personaje entre por un túnel, el cual puede estar ubicado en un lado de la pantalla, es decir, en la parte izquierda, derecha, arriba o abajo, y cuando el personaje entre por el túnel saldrá por el mismo túnel pero esta vez por el lado opuesto de la pantalla, es decir, si entre por el túnel en el lado derecho saldrá por el túnel en el lado izquierdo de la pantalla.

para hacer esto, cuando las coordenadas X en pantalla de mi variable tipo SDL_Rect de mi personaje, para el caso de derecha a izquierda, si esta sobrepasa el ancho de la pantalla entonces yo le asigno el valor -32, para que se ubique un poco antes del valor 0 de la pantalla y entonces a partir de este nuevo punto comience a dibujarse hasta entrar en escena una vez mas.

La cuestión esta en cuando utilizo la función
SDL_BlitSurface()
y la paso la variable SDL_Rect de pantalla de mi caracter, este lo toma bien, pero cuando esta función termina el valor de X se vuelve 0, y el personaje reaparece en pantalla de un tirón, que puede ser esto y como podré solucionarle.

alguien tiene para mi un consejo.

saludos.
Avatar de Usuario
leonel06033
 
Mensajes: 10
Registrado: Lun May 25, 2009 5:15 pm

Notapor hugoruscitti » Lun Nov 23, 2009 9:53 pm

Ten en cuenta que la funcion:

Código: Seleccionar todo
int SDL_BlitSurface(SDL_Surface *src, SDL_Rect *srcrect, SDL_Surface *dst, SDL_Rect *dstrect);


altera el argumento dstrect cuando se imprime
en pantalla para que este argumento indique lo
que efectivamente se imprimió. Por ejemplo si el
rectángulo tiene las coordenadas [-10, -10, 50, 50], la
función seguramente alterará tu rectángulo indicando que
no imprimió en las zonas negativas, y te retorna [0, 0, 50, 50].

Este es un extracto de la documentación de la
función, ahí comenta
cómo altera el último argumento:

This performs a fast blit from the source surface to the destination surface.

The width and height in srcrect determine the size of the copied rectangle. Only the position is used in the dstrect (the width and height are ignored). Blits with negative dstrect coordinates will be clipped properly.

If srcrect is NULL, the entire surface is copied. If dstrect is NULL, then the destination position (upper left corner) is (0, 0).


entonces, como recomendación. No utilices el mismo
rectángulo para los dos argumentos, es preferible que
hagas un nuevo rectángulo de copia para el último
argumento y luego descartarlo.

Saludos.
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 1 invitado

cron