[duda] Palib

estoy intentado que mi sprite al llegar al borde de la pantalla vuelva (como en el pong)
pero no ha nanera...

una manita please

he aqui mi codigo, perdonad el desorden, pero lo estoy usando para aprender y ya sabeis... quito esto lo pongo aqui... lo pongo como comentario para el futuro
#include <PA9.h>

// PAGfxConverter Include
#include "gfx/all_gfx.h"
#include "gfx/all_gfx.c"
   s32 x = 0;    s32 y = 0;
   s32 i=0;
   s32 b=1;
   s32 e=0;
   


int main(void){

   PA_Init(); //PAlib inits
   PA_InitVBL();
   PA_InitText(0,0);
//  PA_InitRand();
   
   PA_LoadSpritePal(0, // Pantalla
         0, // Numero de paleta
         (void*)hola_Pal);   // Nombre de paleta
               
   PA_CreateSprite(0, // Pantalla
         0, // Numero de sprite
         (void*)sprite_prueba_Sprite, // Nombre de sprite
         OBJ_SIZE_32X32, // Tamaño de sprite
         1, // Modo de 256 colores
         0, // Numero de paleta
         0, 0); // Posicion X e Y en la pantalla
         




   while(1) // Infinite loops
   {
   
       x+=1;
   PA_SetSpriteX(0,0,x);
   
        if(x==100) {   
           for(e=0; e<255;e++){ x-=1; PA_SetSpriteX(0,0,x);}; e=0; }
       
     PA_OutputText(0,10,20,"%d x, %d y", x, y);

     if(PA_SpriteTouched(0)){ i=i+1; PA_OutputText(0,0,0,"%d Puntos", i);     
       PA_DeleteSprite(0,0);}
      
       if(Pad.Newpress.A){PA_CreateSprite(0,0,(void*)sprite_prueba_Sprite, OBJ_SIZE_32X32,1,0, 0, 0);}
    
         
          if(Pad.Newpress.L){ i=0; PA_OutputText(0,0,0,"%d Puntos", i);};
                  
         
                PA_WaitForVBL();   
   }
return 0;
}
No entiendo tu codigo... Pero a mi se me ocurre esto (Aviso que no lo he probado...):


#include <PA9.h>

// PAGfxConverter Include
#include "gfx/all_gfx.h"
#include "gfx/all_gfx.c"
s32 x = 0;    s32 y = 0;
s32 i=0;
s32 b=1;
s32 e=0;

s32 velocidadx = 1;
s32 velocidady = 1;


int main(void){

PA_Init(); //PAlib inits
PA_InitVBL();
PA_InitText(0,0);
//  PA_InitRand();

PA_LoadSpritePal(0, // Pantalla
0, // Numero de paleta
(void*)hola_Pal);   // Nombre de paleta

PA_CreateSprite(0, // Pantalla
0, // Numero de sprite
(void*)sprite_prueba_Sprite, // Nombre de sprite
OBJ_SIZE_32X32, // Tamaño de sprite
1, // Modo de 256 colores
0, // Numero de paleta
0, 0); // Posicion X e Y en la pantalla





while(1) // Infinite loops
{
x+= velocidadx;

PA_SetSpriteX(0,0,x);
if (x >= 254){

velocidadx = -1; // Volvemos la velocidad negativa para que vuelva para atras
}
if (x =< 1){

velocidadx = +1; // Volvemos la velocidad positiva para que vuelva para adelante
}
PA_WaitForVBL();   
}
return 0;
}
x+=1;
PA_SetSpriteX(0,0,x);
   
if(x==100) {   
for(e=0; e<255;e++){ x-=1; PA_SetSpriteX(0,0,x);}; e=0; }



En el if (x == 100). Por qué 100 si la pantalla llega hasta 255 y además luego lo haces retroceder precisamente esos 255 pixels? Seguramente por eso no te llega el sprite al borde. Deberías cambiar el 100 por 255.

Además, si lo haces así, el sprite irá hacia delante de forma normal, es decir, a una velocidad de 1 pixel por ciclo, pero en cambio volverá hacia atrás todo en el mismo ciclo. No se si es lo que pretendes o no, pero voy a suponer que no es así xD Para solucionar eso, yo haría algo así (aviso, me acabo de levantar y no me hago responsable de la chapuza que haya podido escribir en las líneas posteriores xDDD)

bool atras = 0; // esto fuera del while

// y esto sustituyendo el cacho de código de antes, dentro del while
if (!atras){ // si no debemos ir hacia atrás
   if (x < 255){ // y además x aún no ha llegado a 255
      x++; // aumentamos la X 1 posición
   }else{ // si llega a 255
      atras=1; // activamos el movimiento contrario
      x--; // y reducimos una posición la x
   }
}else{ // si debemos ir hacia atrás
   if (x > 0){ // y además x aún no ha llegado a 0
      x--; // reducimos la X 1 posición
   }else{ // si llega a 0
      atras=0; // desactivamos el movimiento contrario
      x++; // y aumentamos una posición la x
   }
}
PA_SetSpriteX(0,0,x); // Por último, movemos el sprite según lo que se ha modificado antes


Espero haberte servido de ayuda.

Un saludo ^^
Se nota que estas dormido xDD. Estas diciendo que si la posicion del sprite es menor que 255 aumenta la x. Y si la posicion del sprite es mayor que 0. Disminuye la x.

Conclusion?. El sprite se queda quieto sin moverse, ya que se esta moviendo a la izquierda y a la derecha a la vez xDDD

Saludos
amchacon escribió:Se nota que estas dormido XDD. Estas diciendo que si la posicion del sprite es menor que 255 aumenta la x. Y si la posicion del sprite es mayor que 0. Disminuye la x.

Conclusion?. El sprite se queda quieto sin moverse, ya que se esta moviendo a la izquierda y a la derecha a la vez XDDD

Saludos


Si, pero te has olvidado de un pequeño detalle, la variable "atras". No hace las dos cosas a la vez, sino que hace una u otra en función del valor de ésta. [360º]

EDIT: Lo acabo de probar por si acaso estaba equivocado, pero no, funciona bien. Adjunto la prueba ^^

Adjuntos

gracias keda ^^

lo del 100 fue porque estuve probando una cosa y se me paso cambiarla al poner aqui el codigo :P (como soy muy impaciente para que se quedase a la mitad de la pantalla y no tener que esperar xD)

edit: cuando termine os pongo mi primera obra :P
highfredo escribió:gracias keda ^^

lo del 100 fue porque estuve probando una cosa y se me paso cambiarla al poner aqui el codigo :P (como soy muy impaciente para que se quedase a la mitad de la pantalla y no tener que esperar xD)

edit: cuando termine os pongo mi primera obra :P


En qué estás trabajando? Si se puede saber, claro.

Por cierto, si quieres que el sprite no se te oculte al llegar al final de la pantalla, réstale al 255 el ancho de tu sprite.
keda escribió:
amchacon escribió:Se nota que estas dormido XDD. Estas diciendo que si la posicion del sprite es menor que 255 aumenta la x. Y si la posicion del sprite es mayor que 0. Disminuye la x.

Conclusion?. El sprite se queda quieto sin moverse, ya que se esta moviendo a la izquierda y a la derecha a la vez XDDD

Saludos


Si, pero te has olvidado de un pequeño detalle, la variable "atras". No hace las dos cosas a la vez, sino que hace una u otra en función del valor de ésta. [360º]
EDIT: Lo acabo de probar por si acaso estaba equivocado, pero no, funciona bien. Adjunto la prueba ^^

Vaya FAIL. Me parece que aqui el dormido soy yo xDD

PD: Y encima yo habia escrito mal el codigo ^^.
7 respuestas