Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





[SDL] Problema con limites de la pantalla.

Iniciado por Puyover, 14 de Abril de 2008, 07:54:43 PM

« anterior - próximo »

Puyover

Hola a todos!

Bueno veréis, resulta que yo tengo este código, dentro de una función que controla la nave:

if(Nave.dstrect.x - 19 > 480) Nave.dstrect.x = 0;
else if(Nave.dstrect.x + 19 < 0) Nave.dstrect.x = 480; // No funciona
else if(Nave.dstrect.y - 19 > 272) Nave.dstrect.y = 0;
else if(Nave.dstrect.y + 19 < 0) Nave.dstrect.y = 272; // No funciona


El problema es que yo quiero que cuando la nave se meta por ejemplo por el lado izquierdo de la pantalla, aparezca por el derecho, pero lo único que consigo es que se pare en seco.

Las lineas con comentarios son las que deberían funcionar, y no lo hacen mientras que las demas si que funcionan -.-U

Al principio pense que era porque lo estaba haciendo para la psp, pero ejecutandolo en el pc, me pasa lo mismo. Por si sirve de ayuda, la configuración que estoy usando de video esta:

SDL_SetVideoMode(480, 272, 16, SDL_HWSURFACE | SDL_DOUBLEBUF);

Bueno, gracias y salu2!!

EDITO: Acabo de hacer una prueba moviendo 6 sprites al limite izquierdo y superior, y nada, se bloquean al llegar al final de la pantalla :(
Vivimos en la era de la televisión. Una sola toma de una enfermera bonita ayudando a un viejo a salir de una sala dice más que todas las estadísticas sanitarias. -Margaret Thatcher

Chema

Hola Puyover,

Mmm... Puede que sea un tema de mezclar enteros con signo y sin signo. Cúal es el tipo de dstrect.x y de dstrect.y?

Otra cosa, fíjate que si se te va la nave por una esquina de la pantalla hay que ajustar la x y la y a la vez. Como haces un if, else if, else if...  Para llegar al else if que comprueba la y  hace falta que no se haya entrado en  el if, else if de la x. Si hay que ajustar x e y a la vez necesitarás que se ejecute el código dos veces, la primera ajustaría la x pero no la y, la segunda vez se ajustaría la y. El resultado es que perderás de vista la nave durante un frame. Si los separas así no tendrás este problema:


if(Nave.dstrect.x - 19 > 480) Nave.dstrect.x = 0;
else if(Nave.dstrect.x + 19 < 0) Nave.dstrect.x = 480; // No funciona

if(Nave.dstrect.y - 19 > 272) Nave.dstrect.y = 0;
else if(Nave.dstrect.y + 19 < 0) Nave.dstrect.y = 272; // No funciona






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.