Problemas con un código.

Buenas, pues estoy haciendo mi primer jueguecillo con PALib pero estoy atascado en un código.
Os comento, es un laberinto pero estoy un poco atascado con los muros. Se que para que sea un "muro" es que el sprite toque el color que yo le digo y cuando le toque vuelva al principio.

Bueno, os pongo lo que llevo de código y a ver si me hechais una mano:

#include <PA9.h>
#include "gfx/all_gfx.c"
#include "gfx/all_gfx.h"

s32 x = 100;
s32 y = 125;


int main(int argc, char ** argv)
{
   PA_Init();
   PA_InitVBL();
   PA_EasyBgLoad(0,0,Fondo1);
   PA_LoadSpritePal(0,0,(void*)Puntero_Pal);
   PA_CreateSprite(0,0,(void*)Puntero_Sprite,OBJ_SIZE_32X32,1,0,2,2);

   while (1)
   {
      x += Pad.Held.Right - Pad.Held.Left;
      y += Pad.Held.Down - Pad.Held.Up;
      PA_SetSpriteXY(0, 0, x,y);
      
      if (PA_EasyBgGetPixelCol(0,0,PA_GetSpriteX(1,0),PA_GetSpriteY(1,0)) == PA_RGB(0,0,0))
      
      
      {
         PA_InitText (1,1);
         PA_OutputSimpleText(1,10,12, "Funciona?");
      }
      
   PA_WaitForVBL();
   }
   
   return 0;
}


Os pongo las imagenes que he utilizado.
Imagen
Imagen

Se que son simplonas pero ya las desarrollaré cuando sepa lo básico.
para las imagenes, pon [img]Aqui%20el%20url[/img]
por lo demas, animo con el proyecto. [oki]
ya he actualizado las fotos.
ok, ¿ves k asi se ve mejor? ;)
Pedazo de bruto, ¿cómo se te ocurre poner un init en el while? Los inits van debajo de main(). Seguramente ese sea el error ;)
alexpowerup escribió:Pedazo de bruto, ¿cómo se te ocurre poner un init en el while? Los inits van debajo de main(). Seguramente ese sea el error ;)


aparte de eso:

PA_GetSpriteX(1,0),PA_GetSpriteY(1,0)

no tengo ni idea de como funcionan estas funciones.. pero suponiendo lo que hacen estas pidiendo x e y de un sprite diferente al puntero.. que es el 0,0. Ademas.. si ya tienes x e y que son variables que hacen referencia a ese sprite.. no veo la necesidad de llamar a las funciones GetSpriteX..

ya terminando.. si te fijas.. x e y marcan las coordenadas del sprite... pero esas son las coordenadas del punto 0,0 del sprite.. es decir.. de la esquina superior izquierda. Si lo que quieres es ver el contacto de la esquina del puntero.. tendras que sumar algo a esa x e y. El codigo seria algo asi:

if(PA_EasyBgGetPixelCol(0,0,X+algo,Y+algo) == PA_RGB(0,0,0)){
lo que quieras;
}

Espero haber sido de ayuda
Suikoden77 escribió:
alexpowerup escribió:Pedazo de bruto, ¿cómo se te ocurre poner un init en el while? Los inits van debajo de main(). Seguramente ese sea el error ;)


aparte de eso:

PA_GetSpriteX(1,0),PA_GetSpriteY(1,0)

no tengo ni idea de como funcionan estas funciones.. pero suponiendo lo que hacen estas pidiendo x e y de un sprite diferente al puntero.. que es el 0,0. Ademas.. si ya tienes x e y que son variables que hacen referencia a ese sprite.. no veo la necesidad de llamar a las funciones GetSpriteX..

ya terminando.. si te fijas.. x e y marcan las coordenadas del sprite... pero esas son las coordenadas del punto 0,0 del sprite.. es decir.. de la esquina superior izquierda. Si lo que quieres es ver el contacto de la esquina del puntero.. tendras que sumar algo a esa x e y. El codigo seria algo asi:

if(PA_EasyBgGetPixelCol(0,0,X+algo,Y+algo) == PA_RGB(0,0,0)){
lo que quieras;
}

Espero haber sido de ayuda

La funcion PA_GetSprite es:

PA_GetSprite(X o Y)(pantalla,numero de sprite)

Lo que hace, es devolverte un valor. Dicho valor es la coordenada X o Y del sprite en cuestion (dependiendo si has puesto X o Y). Seria algo asi como el Stylus.X y el Stylus.Y

Como tu dices, tambien puede usar las variables x y que en este caso representan la posicion del sprite...

PD: lo del PA _InitText ha sido un gran FAIL XD
Esque iniciar el texto 60 veces por segundo... Es un poco bruto. Te va a petar la consola por eso xDDDD!!
#include <PA9.h>
#include "gfx/all_gfx.c"
#include "gfx/all_gfx.h"

s32 x = 100;
s32 y = 125;


int main(int argc, char ** argv)
{
   PA_Init();
   PA_InitVBL();
   PA_InitText(1,0);
   PA_EasyBgLoad(0,3,Fondo1);
   PA_LoadSpritePal(0,0,(void*)Puntero_Pal);
   PA_CreateSprite(0,0,(void*)Puntero_Sprite,OBJ_SIZE_32X32,1,0,2,2);

   while (1)
   {
      x += Pad.Held.Right - Pad.Held.Left;
      y += Pad.Held.Down - Pad.Held.Up;
      PA_SetSpriteXY(0, 0, x,y);
      
      if (PA_EasyBgGetPixelCol(0,3,x,y) == (PA_RGB(0,0,0)))
      {
         PA_OutputSimpleText(1,10,12, "Funciona?");
      }
      
   PA_WaitForVBL();
   }
   
   return 0;
}


Listo. Gracias por los comentarios.
te recomiendo si quieres que quede del todo bien que modifiques la imagen del puntero con paint.. y lo desplaces todo lo que puedas a la esquina superior izquierda. ya veras como el resultado es mucho mejor. Saludos
Claro claro, era solo para probar. Ahora aré algún muñecajo o alguna bola y retocaré el escenario.
10 respuestas