[PAlib] Limitar el desplazamiento con PA_SetSpriteXY

Estoy haciendo el típico juego sencillito de naves y me encuentro con un problema muy extraño.

En principio la nave puede desplazarse por toda la pantalla superior, y hago el desplazamiento del sprite con la función PA_SetSpriteXY. El problema reside en que quiero limitar el movimiento de la nave al ámbito de la pantalla, para que no se salga fuera. Lo tengo así:

if(posicion_nave_y>0) posicion_nave_y-=velocidad_nave*(Pad.Held.Up-Pad.Held.Down);
if(posicion_nave_y<164) posicion_nave_y+=velocidad_nave*(Pad.Held.Down-Pad.Held.Up);
if(posicion_nave_x>0) posicion_nave_x-=velocidad_nave*(Pad.Held.Left-Pad.Held.Right);
if(posicion_nave_x<223) posicion_nave_x+=velocidad_nave*(Pad.Held.Right-Pad.Held.Left);

PA_SetSpriteXY(1,0,posicion_nave_x,posicion_nave_y);


En principio, cuando posicion_nave_x y posicion_nave_y alcanzan los límites, debería dejar de aumentarlos; sin embargo no es así, sino que sigue aumentando / disminuyéndolos indefinidamente si se pulsa la tecla adecuada.

Ésto no es todo: el aumento / disminución de ambas variables no se realiza de forma constante, sino que a veces da saltos y aumenta 100 píxeles de repente. ¿Alguien sabe a qué puede deberse éste error?

EDITADO: Solucionado. El problema era que al haber puesto la resta, considero el mismo movimiento 2 veces para cada dirección.
es un poco lioso eso de que mire que tecla has pulsado despues de mirar si puede ir hacia ese lado :S yo lo haria así:

posicion_nave_y
posicion_nave_x

if((Pad.Held.Up)&&(posicion_nave_y>0)) posicion_nave_y--;
else if((Pad.Held.Down)&&(posicion_nave_y<164)) posicion_nave_y++;
if((Pad.Held.Left)&&(posicion_nave_x>0)) posicion_nave_x--;
else if((Pad.Held.Right)&&(posicion_nave_x<223)) posicion_nave_x++;


pero vamos, si lo entiendes mejor de tu manera.. ;)
La diferencia es que en la forma en que lo hago yo hace menos cálculos (o eso creo) por lo que se ganaría rendimiento, aunque para el cálculo que es, dudo mucho que se note lo más mínimo xD.
2 respuestas