Anuncios Google

PAlib básico (Día 1)

Tutoriales avanzados de Homebrewes

PAlib básico (Día 1)

Seguramente a más de uno le gustaría poder crear sus propios homebrews. ¿Y a quién no? Por eso creé este tutorial, al que con un poco de suerte se le unirán más. En este primer día explicaré para qué sirve el archivo main.c que NO podemos borrar, cómo escribir un sencillo texto en ambas pantallas y cómo hacer que el programa responda ante los botones y el stylus de nuestra DS. He de advertir que hay que seguir antes el tutorial de AlmamuPP para instalar el entorno

1.-Main.c

Antes de nada, crearemos un proyecto nuevo. Para ello, nos dirigiremos a C:\DevkitPro\Palib\ y entraremos en el archivo llamado Project (si habéis instalado donde indica el anterior tutorial, si no, buscadlo en donde hayáis instalado todo. Recordad esto para siempre: NUNCA realizaremos proyectos en directorios que contengan espacios en el nombre) Hecho esto, pinchamos en File, New, New Project, y después nos aparecerá esta ventana:

 

En ella escribiremos: 1.-El nombre del archivo (no puede tener espacios) 2.-El directorio (recomiendo este: [dentro del directorio en el que lo pusieses] \tutoriales\textossimples\) 3.-De las posibilidades escogeremos PAlib Template (el icono de la Game Boy Advance SP)

Hecho esto aceptaremos. Volverá a mostrar el mismo programa, pero sin mostrar texto. En los iconos de la derecha abriremos main.c: aquí realizaremos todos los ejercicios. En la hoja main.c veremos este código escrito:

// Includes
 
#include // Include for PA_Lib
 
// Function: main()
 
int main(int argc, char ** argv)
 
{
 
PA_Init(); // Initializes PA_Lib
 
PA_InitVBL(); // Initializes a standard VBL
 
// Infinite loop to keep the program running
 
while (1)
 
{
 
PA_WaitForVBL();
 
}
 
return 0;
 
}
 
// End of main()

Ahora os explicaré para qué sirve cada parte del código:

#include Esto indica a PAlib que incluya las libnds, necesarias para que todo funcione.

int main(int argc, char ** argv) Esto ya es más complicado de explicar: digamos que a partir de aquí el programa comienza a funcionar. Todo lo que le indiquemos (excepto lo del while) dentro de los corchetes se cargará y ejecutará una sola vez.

PA_Init(); Inicia PAlib. Por decirlo de otro modo: prepara el papel (la DS) para escribir encima (para ejecutar lo que sigue).

PA_InitVBL(); Comienza el VBL, que es el que se encarga de que le velocidad de los frames (imágenes) sea correcta (más o menos 60 por segundo).

while(1) Indica que todo lo que se realice dentro de los corchetes se realizará infinitamente mientras la variable de dentro de los paréntesis sea 1 (por el momento entendámoslo así: el código de dentro de sus corchetes se realizará mientras la DS siga encendida [encendida=1, apagada=0]).

PA_WaitForVBL(); Esta función dentro del while sirve para que el VBL siga funcionando; si dejase de funcionar, el código seguiría, pero la imagen quedaría “congelada”.

Return 0; Literalmente significa “devuelve 0”, y eso es lo que hace. Cuando el programa sale del while (como dije antes, si la consola se apagase) el programa finalizaría, puesto que la variable del while es 0.

El resto no sirve de nada. Cuando en el código se pone //, indica que lo que se escriba después de eso es una anotación, y el programa hará caso omiso de eso. Es útil para, por ejemplo, explicar de qué sirve ese código cuando rellenemos hojas de funciones.

 

2.-Creación de textos básicos en ambas pantallas.

Muy bien, comprendido todo esto, aprenderemos a escribir en la pantalla. Basta con saber estos códigos:

PA_InitText(pantalla,capa); Esto indica al programa que en algún momento escribiremos en esa pantalla, y preindica en qué capa escribir el texto.

PA_OutputSimpleText(pantalla,posiciónX,posiciónY,”texto entre comillas”); Con este código le decimos al programa dónde escribir el texto y qué texto poner. ES NECESARIO haber escrito antes el PA_InitText.

NOTA: Este texto no admite caracteres extraños (ñ, acentos, & y demás). Para usar estos necesitaremos otra función, que explicaré en otro tutorial.

Variables a conocer:

Pantallas: 1=superior, 0=táctil. Capas: 0=por encima de todas, 1=por encima de todas menos del 0, 2=por encima del 3, 3=debajo de todas.

PosiciónX: posición horizontal (en tiles en el caso de texto, del tamaño de una letra [1 letra=8x8 píxels]), de 0 a 31.

PosiciónY: posición vertical (también en tiles), de 0 a 23.

AVISO: Todas, repito, TODAS las llamadas de código (a excepción de bucles) deberán acabar en “;”. Si no, el programa lee la siguiente línea como si fuese la misma.

Muy bien, ya sabemos suficiente código como para realizar el ejemplo. Recomiendo leer primero éste antes de intentarlo por cuenta propia.

 // Includes
 
#include // Include de las PAlib
 
// Funcion main()
 
int main(int argc, char ** argv)
{
 
PA_Init();
 
PA_InitVBL();
 
PA_InitText(1,2);
 
PA_InitText(0,2);
 
PA_OutputSimpleText(1,5,5,”Hola mundo!);
 
PA_OutputSimpleText(0,5,5,”Adios mundo”);
 
while (1)
 
{
 
PA_WaitForVBL();
 
}
 
return 0;
 
}
 
// Fin de main() 

Fácil de entender, ¿no? (por favor, si alguien no lo entiende que me lo diga en un comentario e intentaré explicarlo mejor)

 

3.-Botones y stylus. Variables generales.

Los botones y stylus tienen variables propias. Debido a que hay que saber mucha más teoría de la que expliqué en este tutorial, veremos sólamente las variables más simples. En el próximo tutorial indicaré cómo usarlas, pero por el momento que os suenen.

Códigos para los botones:

Pad.Newpress.botón Sirve cuando se quiere dar una pulsación al botón, y luego se suelta

Pad.Held.botón “Mantiene presionado botón”. Indica al programa que se mantiene pulsado dicho botón.

Pad.Released.botón “El botón se suelta (deja de estar pulsado).”

Variables:

Simplemente sustituir botón por Up, Down, Left o Right (cruceta), A, B, X, Y, L, R, Start, Select.

Códigos para el stylus:

Stylus.Newpress Como con los botones.

Stylus.Held Como los botones.

Stylus.Released Como los botones.

Stylus.X Posición X del stylus. Se divide en varias partes:

Stylus.X “Posición X del stylus.”

Stylus.X-a “Posición X del stylus menos a.”

Stylus.X+a “Posición X del stylus mas a.”Así sería con todas las operaciones.

Stylus.X>0 “Si stylus pulsa en una posición X mayor que (de 0 a 260, en píxels).”

Stylus.X<0 “Si stylus pulsa en una posición X menor que (mismas posiciones).”

Stylus.Y Posición Y del stylus. Tiene las mismas partes que Stylus.X.

Stylus.XY Posición exacta del stylus.

 

NOTA: Creo que no hace falta que diga que los usos del stylus son en la pantalla táctil, así que nada de pulsar en la superior Laughing.

Y eso es todo. Bueno, no del todo. Para finalizar y para asegurarnos que lo habéis pillado, os voy a proponer una tarea para realizar por vuestra cuenta. Quiero que cubráis ambas pantallas con letras, pero nada de escribir todo seguido, no. Tenéis que hacerlo creando realizando PA_OutputText por letra. Ánimo, es tedioso, pero nada difícil.

4.363635
Tu voto: Ninguno Votos totales: 4.4 (55 votos)

Anuncios Google

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

c++?

Viejo eso no es c++?? es casi lo mismo las librerias include el main while , etc.

Imagen de OdnetninI

Vamos a ver, es C, pero

Vamos a ver, es C, pero resulta que para aprender a usar una libreria, hay que tener nocionees basicas del lenguaje, por eso se explican cosas de C.


Be Libre my Friend.

Imagen de Dioni0396

Veo, que en la parte del stylus y controles

es muy parecida a lua, bueno al grano:

en la funciona main, escribimos todo esto:

main() int main(int argc, char ** argv)

pero no valdria directamente int main()?

Imagen de Draco el dragon

Puedes poner tranquilamente

Puedes poner tranquilamente int main (void), pero ahora que miro el tutorial, me he dado cuenta de que lo de main() tendria que ser como comentario ya que ahi no pinta nada, en donde el primer codigo, y en el segundo, lo de int main esta como comentario, por lo que el codigo no funcionaria. Habria que sacarlo fuera del comentario y dejar solo como comentario lo de //Funcion main(). Si algun editor pudiera cambiarlo...

Imagen de Dioni0396

Pero.

Pero realmente no me has respondido a la pregunta, que pasaria si lo pusiera asi: int main()?

Gracias.

Imagen de exterminator

Según

tengo entendido, argc y argv son respectivamente el valor y el número de parámetros que pasan por la línea de comandos del programa. Es bastante común en C.

Tienes más información aquí: http://en.wikipedia.org/wiki/Main_function#C_and_C.2B.2B


Para recibir ayuda por parte de otros usuarios más rápidamente, recomendamos que pongas títulos descriptivos y no utilices abreviaturas (estilo MSN) en tus post de los foros. Recuerda que accediendo al Manual del perfecto forero y las Normas de la Comunidad aprenderás trucos para resolver tus dudas antes.

Imagen de Dioni0396

Ok, Gracias.

Es que me estoy iniciando esto de C.

Imagen de halcon_bite

como se

como se llama la funcion de crear un "anuncio" al principio? 

o la tiene y no encuentro el codigo, o me equivoque y estoy hablando de nflib

por ahora estare en palib, ya que hay mas tutoriales.

Imagen de Draco el dragon

¿Anuncios?

Supongo que referiras a los splashes :P

Claro que se pueden hacer. Simplemente lee la parte de splashes de NFlib, y cambia las funciones que vienen por sus equivalientes en PAlib (por ejemplo, setBrightness por PA_SetBrightness o algo asi).

Imagen de halcon_bite

ahhh

splashes, no me acordaba del nomrbe. muchas gracias

probare a ver que tal...

 

Imagen de auroszxmm

No tengo el archivo project

No tengo el archivo project en la carpeta palib :S me baje la ultima version de palib, y en la carpeta no esta...no se si es error mio, o si ese archivo no viene incluido... entonces, como hago ahora??? Triste


Equipos

  • LG Optimus One + ClockWorkMod 5.0.2.7 + IcySnap v1.6 (ICS 4.0.4) + Overclock [Performance/SmartassV2 480min - 748max).
  • NDS Lite Edición Especial Pkmn D&P + R4DS 2GB + WoodR4 1.51.
  • PC: Intel Pentium Dual-Core 1.6Ghz, Intel GMA 950, RAM 1GB, HDD 160 GB + Win7 Ultimate & Archlinux (+Openbox).
  • Apple iPod Touch 4G, iOS 5.1.1, Jailbreak + Tweaks.

Imagen de Jordi1097

Crea un nuevo proyecto con el

Crea un nuevo proyecto con el VHAM (C:\devkitPro\palib\tools\vham).

Saludos

Imagen de auroszxmm

Gracias, estoy ansioso por

Gracias, estoy ansioso por iniciarme en el homebrew de DS :) tendre muuuucho tiempo para eso cuando sea verano :D Por ahora, aprendere y dare mi mejor esfuerzo!

EDITO:

No entiendo, ya copie los archivos de la carpeta "template", pero , no se cual abrir... es el Main.c? Y de ser asi, como se compila? Con el build.bat?

perdonen, es q al no traer vham, parece q esto se dificulta u.u

EDITO2: problema resuelto...esto me pasa por no leer ^^' que bueno que tengo el DevC++ instalado


Equipos

  • LG Optimus One + ClockWorkMod 5.0.2.7 + IcySnap v1.6 (ICS 4.0.4) + Overclock [Performance/SmartassV2 480min - 748max).
  • NDS Lite Edición Especial Pkmn D&P + R4DS 2GB + WoodR4 1.51.
  • PC: Intel Pentium Dual-Core 1.6Ghz, Intel GMA 950, RAM 1GB, HDD 160 GB + Win7 Ultimate & Archlinux (+Openbox).
  • Apple iPod Touch 4G, iOS 5.1.1, Jailbreak + Tweaks.

Imagen de Draco el dragon

Mmmm...

Creo que en la ultima version de PAlib quitaron el VHAM D:

Puede buscar una carpeta llamada template dentro de la de PAlib y copiar y pegarlo todo en la carpeta del proyecto. No se exactamente donde se encuentra esa carpeta ya que ya no dispongo de PAlib D:

Imagen de Jordi1097

Ahora entiendo por qué todos

Ahora entiendo por qué todos critican las nuevas Palib.__.

Imagen de Draco el dragon

Hombre

No solo por eso xP

Supongo que tambien porque quitaron algunas funciones y a otras les cambiaron el nombre (creo que la funcion de cargar backgrounds es una de esas). No se todas las razones que puede haber ya que no las llegue a usar mucho :P

Imagen de krotus

Ayudas mucho!

Grandissimo Extreminator, tus tutoriales son de gran ayuda, te explicas muy bien i sencillo de entender-lo.

Muchas gracias, sigue así.

Imagen de Roboron

¿Y si quiero hacer desaparecer el texto?

imginemos que quiero poner "hola" y des pues lo quiero borrar,¿como se haria?

 

Imagen de Disgepia

Es fácil,

por ejemplo supongamos que escribimos "hola" y luego al pulsar el botón A se borra:

#include <PA9.h>
 
int main(void){
 
	PA_Init();
	PA_InitVBL();
 
	PA_InitText(0,0);//pantalla, número de capa
 
	PA_OutputSimpleText(0,1,5,"Hola");//pantalla, x, y, texto
 
while(1){
 
if(Pad.Newpress.A)PA_ClearTextBg(0);//si presionas A, se borra el texto de la pantalla 0
 
 
    PA_WaitForVBL();
  }
  return 0;
} 

Salu2


Imagen de Roboron

¿Y hay alguna funcion con el microfono?

Es decir,¿al soplar al microfono se podria crear texto?

algo asi:

if(sopla_al_microfono){

PA_OutputSimpleText(0,0,0,"Hola");}

 

 

 

 

Me da error al compilar

Perdonen, soy nuevo en esto de la programación y solo sé de programación lo basico del lenguaje java. Mi problema es que al intentar compilar me sale esto:

 

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

C:\Documents and Settings\Usuario.MIMENDA\Escritorio\Projecto tutorial>make clean

 

basename: extra operand `Settings/Usuario.MIMENDA/Escritorio/Projecto'

Try `basename --help' for more information.

clean ...

 

C:\Documents and Settings\Usuario.MIMENDA\Escritorio\Projecto tutorial>make

basename: extra operand `Settings/Usuario.MIMENDA/Escritorio/Projecto'

Try `basename --help' for more information.

make[1]: /c/Documents: No such file or directory

make[1]: *** No rule to make target `/c/Documents'.  Stop.

make: *** [build] Error 2

 

C:\Documents and Settings\Usuario.MIMENDA\Escritorio\Projecto tutorial>pause

Presione una tecla para continuar . . .

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

(Los guiones los pongo yo por mi cuenta)

y en el archivo tengo escrito algo así:

 

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

#include

int main(int argc, char ** argv)

{

PA_Init();

PA_InitVBL();

PA_InitText(1,0);

PA_InitText(2,0);

PA_OutputSimpleText(1,3,12,"Si estás leyendo esto");

PA_OutputSimpleText(0,3,12,"es que estás vivo");

 

while(1){

 

PA_WaitforVBL();}

 

return(0);

}

---------------------------------------------------------------------------------------------------------------------------------------------------------- Si hay algo mal decidmelo que quiero rectificar para aprender (seguramente esté todo mal ya que no se programar jeje). Gracias.
Imagen de Draco el dragon

Recuerda esto

Las carpetas no pueden tener espacios ni simbolos raros, lo mejor es que crees en la raiz del disco C o el que sea una carpeta como proyectos y dentro las carpetas de los proyectos como "prueba1" o algo asi (solo es un ejemplo).

Y en el codigo que pusiste falta el include de <PA9.h>, vamos, el de PAlib.

Imagen de halcon_bite

???

hola

para que hay que poner

PA_OutputSimpleText(1,5,5,”Hola mundo!”);
 
PA_OutputSimpleText(0,5,5,”Adios mundo”);
 
desntro del parentesis, se (gracias a ti ;) )que el de arriba empieza por uno para que el texto salga en la pantalla de arriba,y el codigo de abajo, para la tactil

pero que quieren decir los 5 que has puesto, me estoy volviendo loco

gracias

Imagen de Anabol

Te explico

PA_OutputSimpleText(0, //pantalla
5, //Coordenada X del texto
5, //Coordenada Y del texto
"Adios mundo"); //Texto a mostrar, siempre entre comillas

Salu2tS!

Imagen de carl1398NDS

ayuda

al compilar me dice: "make" no se reconoce como un comando de lotes interno o externo,  programa o archivo por lotes ejecutable.

no se que pasa ahi; pues yo he estado trabajando con las palib y todo iba bien hasta ahora.

me podriais decir que hago?

gracias de antemano


 

 

NO tengo Project!!

Hola, estoy desesperado.. haber si me contestan pq ya pregunte varias cosas en el foro y nunca me dan una solucion... haber si hoy tengo suerte...

 

Tengo todo  intalado, pero no tengo el archivo Project, para em,pezar a tranajar, ni tampoco el vham o algo asi que escuche que tambien se usaba en otros PAlib. Baje todo del tuto de AlmamuPP.

 

No se que hacer, necesito ayuda!

Imagen de carl1398NDS

ya se cual es tu problema

baja las palib de aquí: http://www.megaupload.com/?d=EK8HHJHS

y para instalarlo, mira esto: http://www.youtube.com/watch?v=Wz96deue9nk

estas me han funcionado bastante bien hasta ahora.


 

 

Imagen de The Dark Master

Las Palib nuevas son una chapuza.

Por no compatibilizar las cosas, les han ido quitando lo que han visto oportuno, una de las cosas que han quitado es eso mismo, pero vamos, que deberia bastarte con el bloc de notas, yo llevo desde que empeze a programar en el y nunca pasa de moda ni de versión :P.


Imagen de carl1398NDS

ya decia yo

que me faltaba el project de las de almamuPP...

Otra duda sobre como compilar xD

Jaaja, bueno, ahora que tengo PAlib y ya programe esto, tengo que compilarlo, pero como hago?

 

Yo tengo una carpeta en el escritorio donde puse para que se haga el homebrew. Ahora en esa carpeta tengo muchos archivos (entre ellos un build, un archivo que se llama como mi programa y que me llava a la plantilla donde esta escrito todo... etc)

 

Pero, cuando yo estoy en la planilla donde se escribe, y tengo todo hecho, como guardo el archivo compilado, o como hago para guardarlo y compilarlo?

dicen que no se puede!

Yo no lo uso pq en este mismo foro habia unos coments que decian que no se podia usar el bloc de notas para programar

Imagen de Anabol

Si se puede

El bloc de notas no es un IDE como lo es el VHAM, es decir, no está especializado en la programación. Pero puedes escribir perfectamente un código en el bloc de notas, guardarlo y compilarlo con el bat.

Salu2TS!

ok, entonces...

Entonces yo lo hago, lo guardo, y dps lo compilo, pero como lo compilo??

 

Disculpame, es que recien empiezo y no entiendo mucho...

Imagen de Anabol

Nah no te preocupes.

Todos tenemos las mismas dudas o parecidas al principio. Cojamos un ejemplo de PA_Lib: C:\devkitPro\palib\examples\Text\Normal\HelloWorld

En esa carpeta tenemos todo lo necesario para crear un HB. Ahora lo que te interesa es el main.c y el build.bat. El main.c es donde tú tienes que escribir el código, una vez escrito lo guardas y haces doble click en build.bat si se te ha instalado todo correctamente se te creará un archivo.nds que es tu primer HB.

Salu2TS!

MIL GRACIAS!!

muchisimas gracias che... ahora me baje una version anterior de todo, para ver si me anda, y por ahora va todo bien.. no empeze a programar, pero talvez ande.

 

Si no anda uso lo del bloc de notas que es una opcion excelente cuando no estas en tu PC y no tenes palib!!

 

muchisimas gracias por tu preocupacion che... cualquier cosa que te pueda ayudar mandame un MP

 

Un saludo

Imagen de comostas

Hola, miren a mi me gustaría

Hola, miren a mi me gustaría aprender a programar en nds por lo menos en este verano, y ayer empecé a hacerlo; pero al intentar hacer el .nds del proyecto me sale un tipo de error (éste:

C:\Users\Enrique\Desktop\project>make clean
clean ...project

C:\Users\Enrique\Desktop\project>make
main.c
c:/Users/Enrique/Desktop/project/source/main.c:5: warning: return type defaults
to 'int'
c:/Users/Enrique/Desktop/project/source/main.c: In function 'main':
c:/Users/Enrique/Desktop/project/source/main.c:6: error: expected '=', ',', ';',
 'asm' or '__attribute__' before '{' token
c:/Users/Enrique/Desktop/project/source/main.c:18: error: stray '\224' in progra
m
c:/Users/Enrique/Desktop/project/source/main.c:18: error: stray '\224' in progra
m
c:/Users/Enrique/Desktop/project/source/main.c:20: error: stray '\224' in progra
m
c:/Users/Enrique/Desktop/project/source/main.c:20: error: stray '\224' in progra
m
c:/Users/Enrique/Desktop/project/source/main.c:38: error: expected '{' at end of
 input
make[1]: *** [main.o] Error 1
make: *** [build] Error 2

C:\Users\Enrique\Desktop\project>pause
Presione una tecla para continuar . . . )

 

El main.c lleva este codigo:

 

// Includes
#include <PA9.h>       // Include for PA_Lib
 
// Function: 
main() int main(int argc, char ** argv)
{
	PA_Init();    // Initializes PA_Lib
	PA_InitVBL(); // Initializes a standard VBL
 
	PA_InitText(1,2);
 
   PA_InitText(0,2);
 
   PA_InitText(1,2);
 
   PA_InitText(0,2);
 
PA_OutputSimpleText(1,5,5,”Hola mundo!);
 
PA_OutputSimpleText(0,5,5,”Adios mundo”);
 
PA_OutputSimpleText(1,8,7,"Que");
 
PA_OutputSimpleText(0,8,7,"guay");
 
	// Infinite loop to keep the program running
 
	while (1)
	{
 
 
 
 
		PA_WaitForVBL();
	}
 
	return 0;
} // End of main()

Si hay algún error, díganme dónde está pero no me digan cómo arreglarlo, ya que ,para aprender mejor, me gustaría arreglarlo yo solo.

 

Gracias

Imagen de magicblack2009

Está en las líneas 18 y en la 20

El error está en las líneas 5 y 6, y 18 y 20, te lo digo porque es un pequeño fallo y a lo mejor no lo ves :P :

En las líneas 5 y 6:

// Function: main() 
int main(int argc, char ** argv)
{

El error es que le distes un salto de línea a main(), por lo que da error (ya está solucionado en lo que puse).

En las líneas 18 y 20:

PA_OutputSimpleText(1,5,5,"Hola mundo!");
 
PA_OutputSimpleText(0,5,5,"Adios mundo");

El error es que las comillas que usabas no eran las correctas, ya que para los textos tienes que usar las comillas de encima del 2 del teclado (lo que te di ya está corregido).

Además, te comento, no hace falta iniciar el texto dos veces en la misma pantalla y capa, con que lo inicies una vez será suficiente, por lo que puedes borrar los dos últimos PA_InitText.

Espero que esto te sirva.

PD: Al compilar, el programa te dice la línea en la que están los fallos, por ejemplo: c:/Users/Enrique/Desktop/project/source/main.c:18: , Ahí te dice donde está la línea con el error.

Salu2


¿Quieres estar totalmente informado sobre el universo 3DS? Visita Magic3DS.

También puedes estar al tanto de toda la actualidad de 3DS en Twitter: @Magic3DS

Imagen de comostas

Gracias

Ok, muchas gracias magiblack y exterminator; pero las comillas salían así porque, al copiarlas del post, salían así xD

Bueno, el error de las líneas ya lo he solucionado aunque ahora me da otro xD. Si no consigo solucionarlo lo vuelvo a postear aquí

 

Muchas gracias de nuevo

 

EDIT:

Nada, no consigo solucionar el otro

Éste es el error: http://img824.imageshack.us/i/errorcomp.png/

Y éste el main.c:

// Includes
#include <PA9.h>       // Include for PA_Lib
 
// Function: main()
int main(int argc, char ** argv)
{
	PA_Init();    // Initializes PA_Lib
	PA_InitVBL(); // Initializes a standard VBL
 
	PA_InitText(1,2);
 
   PA_InitText(0,2);
 
PA_OutputSimpleText(1,5,5,"Hola mundo!");
 
PA_OutputSimpleText(0,5,5,"Adios mundo");
 
PA_OutputSimpleText(1,8,7,"Que");
 
PA_OutputSimpleText(0,8,7,"guay");
 
	// Infinite loop to keep the program running
 
	while (1)
	{
 
 
 
 
		PA_WaitForVBL();
	}
 
	return 0;
} // End of main()

Imagen de The Dark Master

oh oh.

Ese error no es del proyecto, es de la instalación...

Imagen de comostas

ok lo instalo todo de nuevo

ok lo instalo todo de nuevo

Imagen de Anabol

Recuerda

Reniciar antes de instalar las PA_Lib

Imagen de comostas

¡Conseguido!

Muchas gracias a todos vosotros, ya he terminado! Mirad cómo ha quedado: http://img810.imageshack.us/i/parascenebeta.png/

Imagen de The Dark Master

Vaya ^^.

Me alegro de que funciones, estaremos atentos si algún día aportas algún trabajo tuyo ;).

Salu2

Imagen de exterminator

Fíjate bien

Estás usando 2 comillas distintas en las funciones PA_OutputSimpleText. La que se debe usar es la que se encuentra en la tecla del 2 (Shift+2).

Salu2


Para recibir ayuda por parte de otros usuarios más rápidamente, recomendamos que pongas títulos descriptivos y no utilices abreviaturas (estilo MSN) en tus post de los foros. Recuerda que accediendo al Manual del perfecto forero y las Normas de la Comunidad aprenderás trucos para resolver tus dudas antes.

Imagen de 123456abcdef

Exterminator, yo estoy

Exterminator, yo estoy aprendiendo con tus tutos y no tengo nada que decirte yo de programación, pero aunque los tutos son muy buenos hay codigos que no explicaste(ponerlos todos es imposible) y como a mi a otros users les pueden salir preguntas como:

se puede cambiar el color del texto???

te dejo los codigos para hacerlo por si quieres completar el tuto.

PA_SetTextCol(pantalla(1/0),tonosrojo(0-31),tonosverde(0-31),tonosazul(0-31));

Azul: PA_SetTextCol(pantalla, 0, 0, 31);

Rojo: PA_SetTextCol(pantalla, 31, 0, 0);

Blanco: PA_SetTextColpantalla(, 31, 31, 31);

Negro: PA_SetTextCol(pantalla, 0, 0, 0);

Gris: PA_SetTextCol(pantalla, 22, 22, 22);

Magenta: PA_SetTextCol(pantalla, 31, 0, 31);

Ejemplo para color rojo en pantalla superior:

PA_InitText(1,2);

PA_SetTextCol(1,31,0,0,);

PA_OutputSimpleText(1,5,5,"prueba texto color rojo");


A que os mola la firma!!!

Imagen de exterminator

Organización

Se supone que estos tutoriales están pensados para seguirlos con conocimientos nulos (y más aún en el día 1). Por poder puedo poner el color de todo el texto, el de una línea específica, que el texto se escriba dentro de una determinada zona, que se escriba letra a letra, poneer custom fonts... ¿Por qué no lo hago? Por lo dicho, esto es para novatos en el tema. Y digo yo, ¿a quién le sirve saber cambiar el color de un texto si no sabe cargar un triste sprite?

Lo primero es lo primero, y ya se irá explicando a su debido tiempo.

Salu2


Para recibir ayuda por parte de otros usuarios más rápidamente, recomendamos que pongas títulos descriptivos y no utilices abreviaturas (estilo MSN) en tus post de los foros. Recuerda que accediendo al Manual del perfecto forero y las Normas de la Comunidad aprenderás trucos para resolver tus dudas antes.

Imagen de sarutoby

En esta parte, quiero saver una cosa...


¿Como se haria para ver una cosa al hacer 2 pulsaciones seguidas con el Stkylus en un Sprite? 3.-Botones y stylus. Variables generales.

Los botones y stylus tienen variables propias. Debido a que hay que saber mucha más teoría de la que expliqué en este tutorial, veremos sólamente las variables más simples. En el próximo tutorial indicaré cómo usarlas, pero por el momento que os suenen.

Códigos para los botones:

Pad.Newpress.botón Sirve cuando se quiere dar una pulsación al botón, y luego se suelta

Pad.Held.botón “Mantiene presionado botón”. Indica al programa que se mantiene pulsado dicho botón.

Pad.Released.botón “El botón se suelta (deja de estar pulsado).”

Variables:

Simplemente sustituir botón por Up, Down, Left o Right (cruceta), A, B, X, Y, L, R, Start, Select.

Códigos para el stylus:

Stylus.Newpress Como con los botones.

Stylus.Held Como los botones.

Stylus.Released Como los botones.

Stylus.X Posición X del stylus. Se divide en varias partes:

Stylus.X “Posición X del stylus.”

Stylus.X-a “Posición X del stylus menos a.”

Stylus.X+a “Posición X del stylus mas a.”Así sería con todas las operaciones.

Stylus.X>0 “Si stylus pulsa en una posición X mayor que (de 0 a 260, en píxels).”

Stylus.X<0 “Si stylus pulsa en una posición X menor que (mismas posiciones).”

Stylus.Y Posición Y del stylus. Tiene las mismas partes que Stylus.X.

Stylus.XY Posición exacta del stylus.


I like:

Imagen de Draco el dragon

Pues por ejemplo

que al pulsar una vez el stylus empiece una cuenta VBL, y que si lo pulsas antes de que la cuenta llegue a un numero (el que te de la gana) pase algo, algo asi, por ejemplo:

#include <PA9.h>       // Include for PA_Lib
s32 MyCounter=0;
void MyVBLFunction (void) { MyCounter++; }
 
int main(int argc, char ** argv) {
PA_Init();    // Iniciar PA_Lib
PA_InitVBL();
 
while (1) {
if (Stylus.Newpress)    PA_VBLFunctionInit(MyVBLFunction); 
if (Stylus.Newpress && MyCounter<50) PA_OutputSimpleText(0,0,0,"No se que esta pasando");
if (MyCounter>=51)MyCounter=51;
 PA_WaitForVBL();
 PA_CheckLid();
}
return 0;
} // End of main()	

Imagen de sarutoby

Graicas por el codigo, pero...

no consigo hacer lo que queria. Mira este es el codigo de la aplicacion:

#include <PA9.h>       // Include for PA_Lib
#include <stdio.h>  	  // standard lib of C
#include <Fat.h>		  // Include for FAT_lib
#include <nds.h>
#include "gfx/all_gfx.c"
#include "gfx/all_gfx.h"
#include "font/all_gfx.h"
#include "font/all_gfx.c"
 
#define X1 0
#define X2 31
#define Y1 24
#define Y2 31
 
typedef struct
{
  bool character;
  int level;
}save_struct;
save_struct save_data;
 
void PA_InitTextBorders(bool screen, u8 x1, u8 y1, u8 x2, u8 y2);
int main(int argc, char ** argv) {
	PA_Init();
	PA_InitVBL();
	fatInitDefault();
	save_data.character = true;
	save_data.level = 2;	
	FILE* save_file = fopen("save_file.save", "wb");
	fwrite(&save_data, 1, sizeof(save_data), save_file);
	fclose(save_file);
 
	PA_Init16bitBg(0, 0);
	PA_Load16bitBitmap(0, desktop1_Bitmap);	
	PA_LoadSpritePal(0, 0, (void*)mouse_Pal);
 
	PA_CreateSprite(0, 0, (void*)mouse_Sprite, OBJ_SIZE_16X16, 1, 0, 50, 50);
	PA_Create16bitSprite(0, 1, (void*)usuario_Sprite, OBJ_SIZE_64X64, 90, 50);
	while (1)
	{
	   PA_SetSpriteXY(0, 0, Stylus.X-16, Stylus.Y-16);
		if(PA_SpriteTouched(1)) {		   
		   			// Abrir partida guardada al iniciar sesion de usuario
		   		save_data.character = true;		//Asignación de valores a save_data
					save_data.level = 2;					//Asignación de valores a save_data
					FILE* save_file = fopen("save_file.save", "rb");
					fread(&save_data, 1, sizeof(save_data), save_file);
					fclose(save_file);					//cerrar el fichero
						// Aqui termina el codigo de partidas guardadas
		   PA_DeleteSprite(0, 1);
		   PA_ResetBgSys();
			PA_ResetBgSysScreen(0);
			//--------------------
				PA_InitCustomText(1, 0,newfont);
				PA_InitTextBorders(1, X1, Y1, X2, Y2);
				s16 i;
				s16 letter = 0; s16 nletters = 0;
				for(i = 0; i < 65; i++) {
				   PA_BGScrollY(1, 0, i);
				   PA_WaitForVBL();
				}
					while (letter == nletters){ 
						++nletters;	
						letter = PA_SimpleBoxText(1, "Escoje un tema para\nvisualizar la aplicacion", nletters);
						PA_WaitForVBL();
					}
				for(i = 0; i < 60; i++) PA_WaitForVBL();
				for(i = 64; i >= 0; i--) {
				PA_BGScrollY(1, 0, i);
				PA_WaitForVBL();
				}
				PA_EraseTextBox(1);
				for(i = 0; i < 60; i++) PA_WaitForVBL();
				for(i = 0; i < 65; i++) {
				PA_BGScrollY(1, 0, i);
				PA_WaitForVBL();
	}
 
	letter = 0; nletters = 0;
	while (letter == nletters){
		++nletters;	
		letter = PA_SimpleBoxText(1, "La proxima vez que inicies el juego, te pedirá que escojas otro tema.", nletters);
		PA_WaitForVBL();
	}
	for(i = 0; i < 60; i++) PA_WaitForVBL();
 
	for(i = 64; i >= 0; i--) {
		PA_BGScrollY(1, 0, i);
		PA_WaitForVBL();
	}
			//-------------------------
 
			}			
		PA_WaitForVBL();
	}
 
	return 0;
}

Pero no consigo que al clicar 2 veces seguidas en el Sprite 1, se borre todo, ya que desgraciadamente,  se borra toda la pantalla con solo un Click. Yo quiero que se borre en el 2º click...

(Por cierto, el codigo es un poco largo, 98 lineas...xD)


I like:

Imagen de Draco el dragon

Pues...

algo asi, creo que serviria, pero no estoy muy seguro... pruebalo:

#include <PA9.h>       // Include for PA_Lib
#include <stdio.h>  	  // standard lib of C
#include <Fat.h>		  // Include for FAT_lib
#include <nds.h>
#include "gfx/all_gfx.c"
#include "gfx/all_gfx.h"
#include "font/all_gfx.h"
#include "font/all_gfx.c"
 
#define X1 0
#define X2 31
#define Y1 24
#define Y2 31
 
s32 cuentalapiz=0;
void cuentadellapiz(void){cuentalapiz++;}
typedef struct
{
  bool character;
  int level;
}save_struct;
save_struct save_data;
 
void PA_InitTextBorders(bool screen, u8 x1, u8 y1, u8 x2, u8 y2);
int main(int argc, char ** argv) {
	PA_Init();
	PA_InitVBL();
	fatInitDefault();
	save_data.character = true;
	save_data.level = 2;	
	FILE* save_file = fopen("save_file.save", "wb");
	fwrite(&save_data, 1, sizeof(save_data), save_file);
	fclose(save_file);
 
	PA_Init16bitBg(0, 0);
	PA_Load16bitBitmap(0, desktop1_Bitmap);	
	PA_LoadSpritePal(0, 0, (void*)mouse_Pal);
 
	PA_CreateSprite(0, 0, (void*)mouse_Sprite, OBJ_SIZE_16X16, 1, 0, 50, 50);
	PA_Create16bitSprite(0, 1, (void*)usuario_Sprite, OBJ_SIZE_64X64, 90, 50);
	while (1)
	{
	   PA_SetSpriteXY(0, 0, Stylus.X-16, Stylus.Y-16);
		if(PA_SpriteTouched(1) && Stylus.Newpress && cuentalapiz==0) PA_VBLFunctionInit(MyVBLFunction); 
                if(PA_SpriteTouched(1) && Stylus.Newpress && cuentalapiz==50)cuentalapiz=0;
                if(cuentalapiz>=50)cuentalapiz=50;
                if(PA_SpriteTouched(1) && Stylus.Newpress && cuentalapiz>0 && cuentalapiz<50){
 
		   			// Abrir partida guardada al iniciar sesion de usuario
		   		save_data.character = true;		//Asignación de valores a save_data
					save_data.level = 2;					//Asignación de valores a save_data
					FILE* save_file = fopen("save_file.save", "rb");
					fread(&save_data, 1, sizeof(save_data), save_file);
					fclose(save_file);					//cerrar el fichero
						// Aqui termina el codigo de partidas guardadas
		   PA_DeleteSprite(0, 1);
		   PA_ResetBgSys();
			PA_ResetBgSysScreen(0);
			//--------------------
				PA_InitCustomText(1, 0,newfont);
				PA_InitTextBorders(1, X1, Y1, X2, Y2);
				s16 i;
				s16 letter = 0; s16 nletters = 0;
				for(i = 0; i < 65; i++) {
				   PA_BGScrollY(1, 0, i);
				   PA_WaitForVBL();
				}
					while (letter == nletters){ 
						++nletters;	
						letter = PA_SimpleBoxText(1, "Escoje un tema para\nvisualizar la aplicacion", nletters);
						PA_WaitForVBL();
					}
				for(i = 0; i < 60; i++) PA_WaitForVBL();
				for(i = 64; i >= 0; i--) {
				PA_BGScrollY(1, 0, i);
				PA_WaitForVBL();
				}
				PA_EraseTextBox(1);
				for(i = 0; i < 60; i++) PA_WaitForVBL();
				for(i = 0; i < 65; i++) {
				PA_BGScrollY(1, 0, i);
				PA_WaitForVBL();
	}
 
	letter = 0; nletters = 0;
	while (letter == nletters){
		++nletters;	
		letter = PA_SimpleBoxText(1, "La proxima vez que inicies el juego, te pedirá que escojas otro tema.", nletters);
		PA_WaitForVBL();
	}
	for(i = 0; i < 60; i++) PA_WaitForVBL();
 
	for(i = 64; i >= 0; i--) {
		PA_BGScrollY(1, 0, i);
		PA_WaitForVBL();
	}
			//-------------------------
 
			}			
		PA_WaitForVBL();
	}
 
	return 0;
}

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.