[PAlib] Duda...

Holas!!

Os cuento. Estoy haciendo unas pruebas con la función PA_LargeScrollXY() y al cargar un fondo y moverlo quiero establecerle unos márgenes de los cuales no pueda salirse de la pantalla y pueda restablecer el valor de sus coordenadas X e Y. Por ejemplo, en los márgenes arriba e izquierda es muy fácil, ya que el valor de las coordenadas de imagen son 0 y 0:
         // que no se salga de los márgenes posibles
         if (scrollx < 0) scrollx = 0;
         if (scrolly < 0) scrolly = 0;

donde scrollx y scrolly serían las coordenadas de la imagen.

Y ahora es cuando viene el problema, puesto que para los márgenes derecha y abajo necesito algo que me diga cuán larga y ancha es la imagen, puesto que no es lo mismo si cargo un fondo de 800x600 que uno de 2048x2048. No se si me he explicado bien, pero espero que podáis ayudarme.

Gracias de antemano [oki]
keda escribió:Holas!!

Os cuento. Estoy haciendo unas pruebas con la función PA_LargeScrollXY() y al cargar un fondo y moverlo quiero establecerle unos márgenes de los cuales no pueda salirse de la pantalla y pueda restablecer el valor de sus coordenadas X e Y. Por ejemplo, en los márgenes arriba e izquierda es muy fácil, ya que el valor de las coordenadas de imagen son 0 y 0:
         // que no se salga de los márgenes posibles
if (scrollx < 0) scrollx = 0;
if (scrolly < 0) scrolly = 0;

donde scrollx y scrolly serían las coordenadas de la imagen.

Y ahora es cuando viene el problema, puesto que para los márgenes derecha y abajo necesito algo que me diga cuán larga y ancha es la imagen, puesto que no es lo mismo si cargo un fondo de 800x600 que uno de 2048x2048. No se si me he explicado bien, pero espero que podáis ayudarme.

Gracias de antemano [oki]

El scroll es un uint8 creo, por tanto no tiene signo y siempre va a ser mayor que 0. Tendrás que buscar otra forma de comprobarlo.
ANTONIOND escribió:
keda escribió:Holas!!

Os cuento. Estoy haciendo unas pruebas con la función PA_LargeScrollXY() y al cargar un fondo y moverlo quiero establecerle unos márgenes de los cuales no pueda salirse de la pantalla y pueda restablecer el valor de sus coordenadas X e Y. Por ejemplo, en los márgenes arriba e izquierda es muy fácil, ya que el valor de las coordenadas de imagen son 0 y 0:
         // que no se salga de los márgenes posibles
if (scrollx < 0) scrollx = 0;
if (scrolly < 0) scrolly = 0;

donde scrollx y scrolly serían las coordenadas de la imagen.

Y ahora es cuando viene el problema, puesto que para los márgenes derecha y abajo necesito algo que me diga cuán larga y ancha es la imagen, puesto que no es lo mismo si cargo un fondo de 800x600 que uno de 2048x2048. No se si me he explicado bien, pero espero que podáis ayudarme.

Gracias de antemano [oki]

El scroll es un uint8 creo, por tanto no tiene signo y siempre va a ser mayor que 0. Tendrás que buscar otra forma de comprobarlo.


De ese modo si que me lo comprueba, porq tng definidos los scroll como s32 (creo que porque en el ejemplo de PA_Scroll que vi estaba así).

He colgado el .nds a megaupload para que se vea como al intentar subir el fondo al máximo (o ir a la izqueirda) no se pasa de 0 como si lo llevas a la derecha o abajo del todo (los valores de x e y salen en la pantalla de arriba)

Descargar

EDIT: Se controla con el stylus, que se me olvidó decirlo
Vale, me había confundido, creía que preguntabas otra cosa. Para el ancho y alto de un easybg:
const int BGNAME_Info[3] = {2, 256, 192}; // BgMode, Width, Height

Simplemente tienes que fijarte en el nombre del bg y en ese array (está en el BGNAME.c) está la información que necesitas.
if(scroolx>0) tururu...
else x=0;

y lo mismo con la y

Estoy suponiendo que estás trabajando con un sprite ya que una bg no la puedes mover ya que tiene el tamaño de la pantalla de la DS

Espero no estar equivocado
ssssO escribió:Estoy suponiendo que estás trabajando con un sprite ya que una bg no la puedes mover ya que tiene el tamaño de la pantalla de la DS

Espero no estar equivocado


Pues lo estás... [+risas]

Estoy moviendo un bg más grade que la pantalla de la DS con la función PA_LargeScrollXY(), pero gracias de todos modos.

AntonioND, supongo que eso me vendrá estupendo para lo que quería. Mañana lo pruebo y te digo, que acabo de llegar a casa y no tng ganas de ponerme a probar. Gracias ^^
keda escribió:AntonioND, supongo que eso me vendrá estupendo para lo que quería. Mañana lo pruebo y te digo, que acabo de llegar a casa y no tng ganas de ponerme a probar. Gracias ^^

El truco está en mirar las librerías y archivos que te dan. Yo no sabía eso hasta esta tarde. Si buscas, normalmente encuentras que alguien ha hecho ya el trabajo por tí y tú solamente lo tienes que usar.

Ya contarás si te sale. ;)
Va estupendo, AntonioND ^^ Muchas gracias!! Ahora a ver si encuentro en algún lado cómo hacer lo de los mapas de colisiones y todo eso, que con lo de la wiki del palib no me entero mucho [+risas]

PD: Demo con personaje en adjuntos

Adjuntos

keda escribió:
ssssO escribió:Estoy suponiendo que estás trabajando con un sprite ya que una bg no la puedes mover ya que tiene el tamaño de la pantalla de la DS

Espero no estar equivocado


Pues lo estás... [+risas]

Estoy moviendo un bg más grade que la pantalla de la DS con la función PA_LargeScrollXY(), pero gracias de todos modos.

AntonioND, supongo que eso me vendrá estupendo para lo que quería. Mañana lo pruebo y te digo, que acabo de llegar a casa y no tng ganas de ponerme a probar. Gracias ^^


PA_InitParallaxX(0, 0, 256, 256, 256);
PA_InitParallaxY(0, 0, 256, 256, 256);

PA_ParallaxScrollX(0, scrollx);
PA_ParallaxScrollY(0, scrolly);


Mejor que eso no hay. Y usa estructuras y fixed points, consejo de uno que esta creando un zelda entero xD.
Plata escribió:Mejor que eso no hay. Y usa estructuras y fixed points, consejo de uno que esta creando un zelda entero xD.

Yo para mis juegos uso muuuchos floats [qmparto] [qmparto] , así me van a veces de lentos, que tengo a la DS a tope XD. Tendría que dejar de ser tan vago y usar fixed points...
Plata escribió:
PA_InitParallaxX(0, 0, 256, 256, 256);
PA_InitParallaxY(0, 0, 256, 256, 256);

PA_ParallaxScrollX(0, scrollx);
PA_ParallaxScrollY(0, scrolly);


Mejor que eso no hay. Y usa estructuras y fixed points, consejo de uno que esta creando un zelda entero xD.


Lo tendré en cuenta, gracias ;-)

A ver si ahora impletento algo para que la velocidad de avance varíe en función de la distancia del stylus al sprite :P
keda escribió:
Plata escribió:
PA_InitParallaxX(0, 0, 256, 256, 256);
PA_InitParallaxY(0, 0, 256, 256, 256);

PA_ParallaxScrollX(0, scrollx);
PA_ParallaxScrollY(0, scrolly);


Mejor que eso no hay. Y usa estructuras y fixed points, consejo de uno que esta creando un zelda entero xD.


Lo tendré en cuenta, gracias ;-)

A ver si ahora impletento algo para que la velocidad de avance varíe en función de la distancia del stylus al sprite :P


Conseguido :P

Adjuntos

11 respuestas