[NDS][Programación con Palib] 7. Utilización avanzada del stylus

Ahora aprenderemos a usar más a fondo la tactil.

Con stylus se refiere al lapiz tactil, el dedo, el lapiz sin punta que utilizas porque se te an perdido los palitos (yo), etc...
Vamos, a tocar la tactil se refiere.

Bueno, crearemos otro ejercicio y otra carpeta de gráficos y usamos el siguiente sprite:

Imagen

Lo que haremos es que si pulsamos el sprite se anime.
Si pulsamos fuera del sprite se vuelve a cambiar al primer frame.

Codigo:
#include // Include de las PA_Lib
#include "gfx/all_gfx.c"
#include "gfx/all_gfx.h"

// Funcion main()
int main(int argc, char ** argv)
{
PA_Init(); // Iniciamos las PA_Lib
PA_InitVBL(); // Iniciamos VBL

//Paleta de sprites
PA_LoadSpritePal(0, 0, (void*)sprite0_Pal);

//cargamos un sprite
PA_CreateSprite(0, 0,(void*)tecla_Sprite, OBJ_SIZE_32X32,1, 0, 0, 0);




// Bucle
while (1)
{
// Pulsaciones del stylus:

//ahora, el sprite está en el frame 0

//condición
if(( //si...
Stylus.Y>0) && (Stylus.Y<32) //el stylus esta en la coordenada Y 0 y está desde 0 hasta 32 pixeles...
&& (Stylus.X>0) && (Stylus.X<32)){ //y si esta en la coordenada X 0 y desde 0 hasta 32 pixeles...
PA_SetSpriteAnim(0,0,1); //animamos el sprite y salta al frame 1
}

//condición
if //si...
(Stylus.Released) { //se levanta el stylus en unas coordenadas QUE NO SEAN las antes dadas...
PA_SetSpriteAnim(0, 0, 0); //el sprite vuelve al frame 0
}
PA_WaitForVBL();
}

return 0;
} // Fin de main()


No es tampoco muy dificil...

Captura:

Imagen

Descarga:
http://www.megaupload.com/es/?d=FW3SEN7U

------------------------------------------------

Bien, ahora, utilizaremos la tactil con otro codigo mas simple y que hace la misma función.

Lo que haremos sera, que si pulsamos, se anime el sprite, si dejamos pulsado el stylus, carga un fondo y si levantamos el stylus, deje de animarse y aparezca otro Bg (background o fondo).

Configuración del Pagfx (doy por sabido de sobra esto, pero por si acaso...):

#TranspColor magenta

#Sprites :
apaga.PNG 256colors sprite0


#Backgrounds :
bg0.PNG EasyBg
bg1.PNG EasyBg



Codigo:
#include // Include de las PA_Lib
#include "gfx/all_gfx.c"
#include "gfx/all_gfx.h"

// Funcion main()
int main(int argc, char ** argv)
{
PA_Init(); // Iniciamos las PA_Lib
PA_InitVBL(); // Iniciamos VBL

PA_InitText(1, 0);

//Paleta de sprites
PA_LoadSpritePal(0, 0, (void*)sprite0_Pal);


//cargamos un sprite
PA_CreateSprite(0, 0,(void*)apaga_Sprite, OBJ_SIZE_32X32,1, 0, 0, 0);




// Bucle
while (1)
{
// Pulsaciones del stylus:

//ahora, el sprite está en el frame 0

//condición
if //si...
((Stylus.Newpress) //Hacemos una nueva pulsacion
&& //y
PA_StylusInZone(0, 0, 32, 32)) //el stylus esta en la siguiente zona (x1, y1, x2, y2)...
{

PA_SetSpriteAnim(0,0,1); //animamos el sprite y salta al frame 1
}

if //si
((Stylus.Held) //el stylus está manteniendose pulsado
&& //y
PA_StylusInZone(0, 0, 32, 32)) //el stylus está en estas cordenadas...
{
// Borramos el bg por si volvemos a pinchar
PA_DeleteBg(0, 3);
//cargamos el fondo
PA_EasyBgLoad(0, 3, bg1);
}


if //si
((Stylus.Released) //levantamos el stylus
&& //y
PA_StylusInZone(0, 0, 32, 32)) //el stylus esta en estas cordenadas...
{
//borramos el anterior bg, el sprite pasa al frame 0 (primero) y aparece otro bg distinto
PA_DeleteBg(0, 3);

PA_SetSpriteAnim(0,0,0);
PA_EasyBgLoad(0, 3, bg0);
}

PA_WaitForVBL();
}

return 0;
} // Fin de main()

Bueno, con esto, ya podemos crear asta nuestros propios botones y tal.

Descarga:
http://rapidshare.com/files/79417462/ej15.zip.html


Captura:

Imagen




Si repasais un poco eso no hace falta tarea. xD.

Bueno, como todos lo aclamabais tanto, he decidido que el siguiente tutorial sea de sonido.

Salu2 ^^.

P.D: Voy a ir poniendo en el hilo recopilatorio todos los tutos en un pdf.
gracias por este nuevo manual, estaba esperandolo!!!!

un saludo y gracias
Esto es un poco raro no le encuentro aplicacion pero muchas gracias de todas formas ^^

salu2
:-O

PA_StylusInZone...

Cómo se me habrá podido pasar esa función tan cómoda?

Y yo haciendo if(Stylus.X>bla&&Stylus.Xbli){
//...
}

[tomaaa]
Gori Fater escribió::-O

PA_StylusInZone...

Cómo se me habrá podido pasar esa función tan cómoda?

Y yo haciendo if(Stylus.X>bla&&Stylus.Xbli){
//...
}

[tomaaa]


xD

eolpxw escribió:Esto es un poco raro no le encuentro aplicacion pero muchas gracias de todas formas ^^

salu2


como que no le ves aplicación???
cuando quieras crear un menu tactil, un boton tactil, cambiar algun valor (de esto ultimo hay vastantes formas), hacer scroll (es una manera un poco chapuza pero vale), etc...
PiratePila está baneado por "crearse clones para trollear"
Sencillamente un 10 para tí, tio.

Cuando tenga mi DS Lite y un flashcart me pondré a practicar con algo. Sería bueno hacer un hilo recopilatorio con todos tus tutoriales y ponerlo fijo arriba. [oki]
PiratePila escribió:Sencillamente un 10 para tí, tio.

Cuando tenga mi DS Lite y un flashcart me pondré a practicar con algo. Sería bueno hacer un hilo recopilatorio con todos tus tutoriales y ponerlo fijo arriba. [oki]


ese hilo recopilatorio y chincheta ya existe... xD

P.D: Alguien que me ayude a crear un pdf? nunca he echo uno... xD
El programa DoPDF v5 es el que yo uso y es facil de usar, solo tengo que hacer cualquier cosa en Word, le doy a IMPRIMIR y elijo la impresora DoPDF y me creo el archivo

Plata escribió:como que no le ves aplicación???
cuando quieras crear un menu tactil, un boton tactil, cambiar algun valor (de esto ultimo hay vastantes formas), hacer scroll (es una manera un poco chapuza pero vale), etc...

Ya entiendo entones perfecto [plas]
Plata escribió:
ese hilo recopilatorio y chincheta ya existe... xD

P.D: Alguien que me ayude a crear un pdf? nunca he echo uno... xD


el openofficetiene un botoncito que te pasa el documento a pdf :)
WoRMs escribió:
el openofficetiene un botoncito que te pasa el documento a pdf :)


gracias po la ayuda de todos, xD, yo he conseguido empezar con el pdf creator.

PD: las dudas que tengais sobre cualquier tuto al hilo recopilatorio.

tambien palabras que desconoceis su significado, etc...

salu2
Uhhh gracias por el tuto ^^! Un dia con lluvia (No voy a trabajar ^^) me pongo a hacerlo ^^...

Me quiero armar un juego pero es taaaaaaaaaaaaaaan dificil xD...


Por cierto, una preguntita... Me conviene usar funciones para TODO, o solo para determinadas cosas?

El problema que tengo es que se me "ensucia" y que da el codigo "desprolijo". Es normal que me pase esto, porque me pasa con TODOS los lenjuajes... Y yo cuando descompilo los archivos .swf y veo todo el codigo tan ordenadito y "perfecto" [triston]

Alguna recomendacion para ordenar el codigo? [360º]

^^
ZequeZ :P
^^
¿Usar muchos espacion en blanco??? xD

yo en los tutoriales intento ordenar vien el codigo, pero en mis proyectos propios el codigo esta todo desordenado y en ingles porque entre que todo esta en ingles si los apuntes estan en español me ago la picha un lio... xD

Usa tambien varios archivos para el proyecto.

vete a el ejemplo de palib que esta en:

C:\devkitPro\PAlibExamples\Demos\MultipleFiles

yo ago eso y usar muchos espacios.

salu2
Una pregunta, que hay que poner después del if (y despues de la condicion, entre {}) para borrar texto? Quiero que mientras se esté presionando el botón salga un texto y cuando se deje de pulsar, se borre.
Gracias!

EDIT: Despues de buscar un montón por los ejemplos y por google lo he encontrado: PA_ClearTextBg(1) Donde el número es la pantalla, y te borra (creo) todo el texto de esa pantalla.
Puedes usar ese codigo o poner texto en blanco(espacios) encima de lo escrito.
Plata (o cualquiera jeje) otra preguntita, que hay que hacer para que una condición solo se cumpla si ya se ha cumplido otra con anterioridad?
Por ejemplo, he hecho que al darle a un botón (juego nuevo xD), te cuente media frase, y al darle a una flecha la otra media, pero cuando estoy en el "menu principal" donde aparece juego nuevo, si le doy a la flecha, aparece también la segunda parte de la frase. Te dejo el código por si ayuda:
// Includes
#include <PA9.h>       // Include for PA_Lib
#include "gfx/all_gfx.c"
#include "gfx/all_gfx.h"

// Function: main()
int main(int argc, char ** argv)
{
   PA_Init();    // Initializes PA_Lib
   PA_InitVBL(); // Initializes a standard VBL
   PA_LoadSpritePal(0, 0, (void*)sprite0_Pal);
   PA_InitText(0, 1);
   
   PA_EasyBgLoad(0, 3, bg0);
   
   PA_CreateSprite(0, 1, (void*)nuevojuego1_Sprite, OBJ_SIZE_32X32, 1, 0, 80, 40);
   PA_CreateSprite(0, 2, (void*)nuevojuego2_Sprite, OBJ_SIZE_32X32, 1, 0, 112, 40);
   PA_CreateSprite(0, 3, (void*)nuevojuego3_Sprite, OBJ_SIZE_32X32, 1, 0, 144, 40);
   
   // Infinite loop to keep the program running
   while (1)
   {
   if ((Stylus.Held) && PA_StylusInZone(80, 40, 144, 72)){
      PA_DeleteSprite(0, 1);
      PA_DeleteSprite(0, 2);
      PA_DeleteSprite(0, 3);
      PA_OutputSimpleText(0, 5, 10, "Esta es la historia...");
      PA_OutputSimpleText(0, 0, 0, ">");
      PA_CreateSprite(0, 4, (void*)flecha_Sprite, OBJ_SIZE_32X32, 1, 0, 224, 160);   
}   
      if ((Stylus.Held) && PA_StylusInZone(0, 0, 10, 10)){
         PA_ClearTextBg(0);
         PA_OutputSimpleText(0, 5, 10, "...de un chaval listo");
      }   
     
      if ((Stylus.Held) && PA_StylusInZone(224, 160, 256, 192)){
         PA_DeleteSprite(0, 4);
         PA_ClearTextBg(0);
         PA_CreateSprite(0, 1, (void*)nuevojuego1_Sprite, OBJ_SIZE_32X32, 1, 0, 80, 40);
         PA_CreateSprite(0, 2, (void*)nuevojuego2_Sprite, OBJ_SIZE_32X32, 1, 0, 112, 40);
         PA_CreateSprite(0, 3, (void*)nuevojuego3_Sprite, OBJ_SIZE_32X32, 1, 0, 144, 40);
      }   
   
      PA_WaitForVBL();
   }
   
   return 0;
} // End of main()


Bueno, muchisimas gracias :D
Todavia no lo he enseñado, pero bueno, asi aprendeis mas:

/ Includes
#include // Include for PA_Lib
#include "gfx/all_gfx.c"
#include "gfx/all_gfx.h"

// Function: main()
int main(int argc, char ** argv)
{
PA_Init(); // Initializes PA_Lib
PA_InitVBL(); // Initializes a standard VBL
PA_LoadSpritePal(0, 0, (void*)sprite0_Pal);
PA_InitText(0, 1);

PA_EasyBgLoad(0, 3, bg0);

PA_CreateSprite(0, 1, (void*)nuevojuego1_Sprite, OBJ_SIZE_32X32, 1, 0, 80, 40);
PA_CreateSprite(0, 2, (void*)nuevojuego2_Sprite, OBJ_SIZE_32X32, 1, 0, 112, 40);
PA_CreateSprite(0, 3, (void*)nuevojuego3_Sprite, OBJ_SIZE_32X32, 1, 0, 144, 40);

bool menu2 = false; //contador, le hechamos atras

// Infinite loop to keep the program running
while (1)
{
if ((Stylus.Newpress) && PA_StylusInZone(80, 40, 144, 72) && menu2 == false){ /* si pulsamos
en esa zona y el contador es falso Pro cierto, usa mejor nueva pulsacion (newpress) que pulsacion
mantenida(held)*/

PA_DeleteSprite(0, 1);
PA_DeleteSprite(0, 2);
PA_DeleteSprite(0, 3);
PA_OutputSimpleText(0, 5, 10, "Esta es la historia...");
PA_OutputSimpleText(0, 0, 0, ">");
PA_CreateSprite(0, 4, (void*)flecha_Sprite, OBJ_SIZE_32X32, 1, 0, 224, 160);

menu2 = true; //lo pasamos a verdadero
}
if ((Stylus.Newpress) && PA_StylusInZone(0, 0, 10, 10) && menu2 == true){ /*si es verdadero hace
lo siguiente, si esta en falso no*/
PA_ClearTextBg(0);
PA_OutputSimpleText(0, 5, 10, "...de un chaval listo");
menu2 = true; // seguimos estando en el segundo menu, asi que lo ponemos verdadero
}

if ((Stylus.Newpress) && PA_StylusInZone(224, 160, 256, 192) && menu2 == true){ /*si es verdad, hace
lo siguente, sino no*/
PA_DeleteSprite(0, 4);
PA_ClearTextBg(0);
PA_CreateSprite(0, 1, (void*)nuevojuego1_Sprite, OBJ_SIZE_32X32, 1, 0, 80, 40);
PA_CreateSprite(0, 2, (void*)nuevojuego2_Sprite, OBJ_SIZE_32X32, 1, 0, 112, 40);
PA_CreateSprite(0, 3, (void*)nuevojuego3_Sprite, OBJ_SIZE_32X32, 1, 0, 144, 40);
menu2 = false; // como salimos del segundo menu, ahora decimos que es falso
}

PA_WaitForVBL();
}

return 0;
} // End of main()


lee todas las notas que te he añadidio en el codigo, que te seran utiles.

salu2
Muchísimas gracias, no tengo tiempo ahora para probarlo, mañana termino eso que estoy haciendo y le añado más cosas con tu tutorial 8, profe.
Plata escribió:Todavia no lo he enseñado, pero bueno, asi aprendeis mas:

lee todas las notas que te he añadidio en el codigo, que te seran utiles.

salu2


Es necesario aprender eso para avanzar?
judelco escribió:
Es necesario aprender eso para avanzar?


eso va en el tuto 10, pero yo no te obligo a que no aprendas si te interesa.

salu2
18 respuestas