[NDS][Programación con Palib] 10. Menus, funciones y archivo

Con este tutorial ya termino lo que seria el "primer bloque", la parte mas basica y aburrida, y pasamos a 2D (EHHH!!!).
Cuando termineis este tutorial tan facil, sereis perfectamente capaces de crear una aplicacion util y seria.

Antes de nada, aviso que para este tutorial lo voy a explicar de otra forma, voy a explicarlo paso a paso, y despues pondré un pequeño ejemplo.

Bueno, no me quiero enroyar mas, asi que empiezo.


Menus, algo que mucha gente me ha preguntado como crear... para esto vamos a usar booleanos

Y os preguntareis... ¿Que es un booleano?
Muy simple, es una "variable" especial, que solo admite el valor true (verdadero) o el valor false (falso).

Una variable "normal" tambien vale, pero vas a tener que hacer lo mismo que con booleanos y vas a tener mas provavilidades de liarte y confundirte.
Ahora vamos a usar poquitos, como mucho tres, pero en un proyecto grande para esto necesitas tener una capacidad logica y de comprension vastante grande, porque si tienes muchos te haces la picha un lio (o lo que tengas) :p.

Y supongo que tendreis otras dudas... ¿Como se crean y usan los booleanos?

Por ejemplo, si queremos hacer un booleano que se llame menu y que al principio este en false seria poner esto:

// lo declaramos
bool menu;
// le damos el valor inicial
menu = false;


Así de facil, muy parecido a una variable.

Ahora vamos a usarlos. ¿Como?

Pues bien simple, con un if.


if (menu == false){
// lo que sea
}



Por supuesto, cuando los compruebas en un if, tienes que decir si el valor es true o false.
Se suelen usar junto a una accion, por ejemplo:

// imaginamos que hemos cargado un fondo, que seria por ejemplo una intro


// si pulsamos la pantalla y el valor del booleano en false

if ((Stylus.Newpress) && menu == false){

// pues por ejemplo, borramos los bg anteriores y cargamos otros nuevos

menu = true; // al cambiar los bg hemos puesto el fondo que seria el menu, y le decimos que ya estamos en el menu.

}




// si pulsamos el boton a y el valor del boleanos (que habiamos cambiado en el anterior if de false a true) es true

else if ((Pad.Newpress.A) && menu == true){

// lo que sea, por ejemplo, vamos a hacer que vuelva a el menu anterior
// pues cargariamos otra vez los bg anteriores (podemos usar una funcion para esto, que veremos mas adelante)

menu == false; // como volvemos al otro menu, volveriamos a decir que es falso
}



Y ya podemos hacer un menu, tan facil como veis.


Ahora, vamos a hacer un ejemplo aver si os habeis enterado:

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


int main(int argc, char ** argv)
{
PA_Init();
PA_InitVBL();


bool menu; /* declaramos el booleano y le damos el valor de falso,
si es falso va a ser que esta en el menu 1 y si es verdadero está en el 2*/

// le damos el valor de falso
menu = false;


// cargamos los bg del menu 1
PA_EasyBgLoad(0, 3, bg0_1);
PA_EasyBgLoad(1, 3, bg0_2);


while (1)
{

// si tocamos la pantalla y estamos en el menu 1...
if ((Stylus.Newpress) && (menu == false)){ /*OJO MUY IMPORTANTE, si pones como condicion el
valor de un booleano o una variable en el if, enved de = hay que colocarle ==, sino no lo comprueba*/

// borramos los anteriores bg
PA_DeleteBg(0, 3);
PA_DeleteBg(1, 3);
// cargamos los bg del menu 2
PA_EasyBgLoad(0, 3, bg1_1);
PA_EasyBgLoad(1, 3, bg1_2);

menu = true; // indicamos que estamos en el menu 2
}


// ahora vamos a volver al menu 1

else if ((Stylus.Newpress) && (menu == true)){ // si tocamos la pantalla y estamos en el menu 2...
// borramos los anteriores bg
PA_DeleteBg(0, 3);
PA_DeleteBg(1, 3);
// cargamos los bg del menu 1 otra vez
PA_EasyBgLoad(0, 3, bg0_1);
PA_EasyBgLoad(1, 3, bg0_2);

menu = false; // indicamos que estamos en el menu 1
}
PA_WaitForVBL();
}

return 0;
}


Captura:

Imagen

Descarga:
http://www.zonahomebrew.com/modules.php ... tit&lid=77


Y ya esta, ahora, a por las funciones.

Todos savemos lo que es una funcion. Vamos a usar las de tipo void.

Para el que ande un poco despiestadillo, una libreria, es un conjunto de funciones.
Las funciones se usan para "hacer varias cosas de un tiron", vastante útiles, ya vereis, me cuesta definirlo xD.
Una funcion de palib, por ejemplo, seria <<PA_Init();>>.

Ahora, aprenderemos a crearlas...

Para usar una funcion hay que hacer tres cosas, declararla, "reyenar" esa funcion, y llamarla.

Al declarar una funcion podemos usar dentro de ella variables para facilitarlo aun mas. Es parecido a una variable.

// declaramos la primera funcion(simple)
void textosimple(void);

// declaramos la segunda funcion, esta con variables
void textocustom(u16 x, u16 y, const char *texto);


Hemos declarado dos funciones, una con variables, lo que vamos a hacer es mostrar texto con las dos.
Centrandonos en la que tiene variables. Vamos a usar x para la posicion x del texto, y por la posicion y, y la cadena de caracteres por el texto.

// vamos a "reyenar" nuestra funcion primera
void textosimple(void){
// esta funcion va a hacer que aparezca texto normal y corriente.
PA_OutputSimpleText(0, 5, 5, "Hemos llamado a la funcion primera");
}



// ahora vamos a usar la segunda, la que contiene las variables
void textocustom(u16 x, u16 y, const char *texto){
// sustituimos cada valor por su letra, x por posicion x, y por posicion y, y texto por el texto que escribimos
PA_OutputSimpleText(0, x, y, texto);
}




Así ya estan preparadas para ser usadas nuestras funciones.

Ahora lo ultimo, que es llamarlas:
// si pulsamos A, llamamos a la primera funcion
if (Pad.Newpress.A){
// llamamos a la funcion, lo que hara que aparezca texto
textosimple();
}



if (Pad.Newpress.B){
// llamamos a la funcion, y le damos valores de posición x e y, ademas de escribir el texto que queramos desde ella
textocustom(7, 10, "Carahuevo");
}


Y asi de facil que es. Esa funcion seria una mierda en mayusculas, porque no nos ayuda mucho que digamos, pero es un ejemplo.
Lo bueno de esto, es que podemos modificar esos valores mientras la aplicacion se ejecuta (siempre que este en un blucle la funcion).

Ahora, el ejemplo:

#include <PA9.h>

// declaramos la primera funcion(simple)
void textosimple(void);

// declaramos la segunda funcion, esta con variables
void textocustom(u16 x, u16 y, const char *texto);


int main(int argc, char ** argv)
{
PA_Init();
PA_InitVBL();
PA_InitText(0, 0);


while (1)
{
// vamos a "reyenar" nuestra funcion primera
void textosimple(void){
PA_OutputSimpleText(0, 5, 5, "Hemos llamado a la funcion primera");
}

// ahora vamos a usar la segunda, la que contiene las variables
void textocustom(u16 x, u16 y, const char *texto){
PA_OutputSimpleText(0, x, y, texto);
}

// si pulsamos A, llamamos a la primera funcion
if (Pad.Newpress.A){
// llamamos a la funcion
textosimple();
}

if (Pad.Newpress.B){
// llamamos a la funcion, y le damos valores x e y, ademas de escribir el texto que queramos desde ella
textocustom(7, 10, "Carahuevo");
}

PA_WaitForVBL();
}

return 0;
}


Captura:

Imagen

Descarga:
http://www.zonahomebrew.com/modules.php ... tit&lid=78


Ahora, lo ultimo, vamos a crear un mini-SO MUY BASICO, aplicando las funciones y los booleanos.

Lo que vamos a hacer es un escritorio, un sprite que representaria una sub-aplicacion(tipo un .exe), y poder entrar y salir de la sub-aplicacion.
Va a ser muy tipo "windows", asi que los interesados en hacer SO, les va a ser de gran ayuda.

Vamos a usar también multiarchivo, es tan simple que no me enroyo, solo con que lo veais en el código ya lo entendereis.

Empezamos:

Con nuestro main.c ya de nuestro nuevo proyecto, crearemos un .txt y lo renombramos a main.h. En main.h "llamaremos" a los demas archivos.
Hacemos lo mismo, otro .txt y le llamamos funciones.h y otro llamado aplicacion1.h

Antes de nada, recomiendo descargar este ejemplo para asimilarlo mejor

Tenemos cuatro archivos:
- main.c
- main.h
- funciones.h
- aplicación1.h


Empezamos con el código de main.c:
#include <PA9.h> // Include for PA_Lib
#include "gfx/all_gfx.c"
#include "gfx/all_gfx.h"
// incluimos main.h... OJO, hemos de tener cuidado en el orden que se leen los ficheros.
#include "main.h"

int main(int argc, char ** argv)
{
PA_Init();
PA_InitVBL();

// iniciamos el texto
PA_InitText(0, 0);

// cargo la paleta de los sprites
PA_LoadSpritePal(0, 0, (void*)sprite0_Pal);

// cargo el bg de la tactil y el de la de arriba
PA_EasyBgLoad(0, 3, bg0);
PA_EasyBgLoad(1, 3, bg1);


// creo el sprite del programa
PA_CreateSprite(0, 0, (void*)programa_Sprite, OBJ_SIZE_32X32, 1, 0, 10, 10);
// funcion de palib, lo que va a hacer es cambiar la prioridad de los sprites, en este caso para dejarle detras de la ventana cuando se abra
PA_SetSpritePrio(0, // pantalla
0, // sprite
3); //capa


while (1)
{

// damos opcion de mover la aplicacion por el escritorio (como en windows)
PA_MoveSprite(0);

PA_SetTextTileCol(0, 9);
// ponemos la hora y los minutos
PA_OutputText(0, 27, 22,"%02d:%02d ",
PA_RTC.Hour, // igual que si queremos saver la posicion del stylus...
PA_RTC.Minutes);

// cargo mi funcion de aplicación (archivo aplicacion1.h)
App1();


PA_WaitForVBL();
}

return 0;
}



Main.h:

#ifndef MAIN_H
#define MAIN_H

// y entre esto va el codigo que quieras, no es tan dificil...
// VAMOS A INCLUIR LOS DEMAS ARCHIVOS...

//-----------------------------------------------------
//
// Funciones.h, lo incluimos, aqui declararemos las funciones mas "generales"
//
//-----------------------------------------------------

#include "funciones.h"

//-----------------------------------------------------


//-----------------------------------------------------
//
// Aplicacion1.h, aqui meteremos lo que seria la aplicación primera (y unica) que le meteremos
//
//-----------------------------------------------------

#include "aplicacion1.h"

//-----------------------------------------------------



#endif



Funciones.h:

#ifndef FUNCIONES_H
#define FUNCIONES_H

// lo que hace esta función es crear una nueva ventana que despues se reyena
void nuevaventana(const char *nombreventana);

// esta función cierra la ventana de la sub-aplicacion
void cerrar(void);

void nuevaventana(const char *nombreventana){
// el titulo de la aplicacion que aparece en la ventana
PA_SetTextTileCol(0, 9);
PA_OutputSimpleText(0, 3, 1, nombreventana);
// creamos la ventana a partir de sprites
PA_CreateSprite(0, 1, (void*)ventapp1_Sprite, OBJ_SIZE_64X64, 1, 0, 1, 2);
PA_CreateSprite(0, 2, (void*)ventapp2_Sprite, OBJ_SIZE_64X64, 1, 0, 64, 2);
PA_CreateSprite(0, 3, (void*)ventapp3_Sprite, OBJ_SIZE_64X64, 1, 0, 128, 2);
PA_CreateSprite(0, 4, (void*)ventapp4_Sprite, OBJ_SIZE_64X64, 1, 0, 192, 2);
PA_CreateSprite(0, 5, (void*)ventapp5_Sprite, OBJ_SIZE_64X64, 1, 0, 1, 66);
PA_CreateSprite(0, 6, (void*)ventapp6_Sprite, OBJ_SIZE_64X64, 1, 0, 64, 66);
PA_CreateSprite(0, 8, (void*)ventapp8_Sprite, OBJ_SIZE_64X64, 1, 0, 192, 66);
PA_CreateSprite(0, 7, (void*)ventapp7_Sprite, OBJ_SIZE_64X64, 1, 0, 128, 66);


// creo el sprite que cierra la ventana
PA_CreateSprite(0, 9, (void*)cerrar_Sprite, OBJ_SIZE_16X16, 1, 0, 234, 5);

// funcion de palib, lo que va a hacer es cambiar la prioridad de los sprites para que el texto este delante de ellos
PA_SetSpritePrio(0, // pantalla
1, // sprite
2); //capa
PA_SetSpritePrio(0, 2, 2);
PA_SetSpritePrio(0, 3, 2);
PA_SetSpritePrio(0, 4, 2);
PA_SetSpritePrio(0, 5, 2);
PA_SetSpritePrio(0, 6, 2);
PA_SetSpritePrio(0, 7, 2);
PA_SetSpritePrio(0, 8, 2);

}

void cerrar(void){
// borramos los sprites de la ventana
PA_DeleteSprite(0, 1);
PA_DeleteSprite(0, 2);
PA_DeleteSprite(0, 3);
PA_DeleteSprite(0, 4);
PA_DeleteSprite(0, 5);
PA_DeleteSprite(0, 6);
PA_DeleteSprite(0, 7);
PA_DeleteSprite(0, 8);
PA_DeleteSprite(0, 9);
// quitamos el texto y le devolvemos su color normal
// funcion que "limpia" una capa (incluido texto)
PA_ClearBg(0, 0);
PA_SetTextTileCol(0, 0);
}

#endif



Aplicacion1.h:

#ifndef APLICACION1_H
#define APLICACION1_H

/* vamos a hacer una funcion que nos va a indicar el estado en el que
esta el programa (si se mueve, si esta seleccionado, si esta abierto...)
y lo que ocurre cuando se abre*/
void App1(void);

// estado es una variable que usaremos como si fuera un booleano
// abierto un booleano.
u16 estado = 0;
bool abierto = false;

// variables que usaremos dentro de nuestra sub-aplicacion
u8 colL = 1;
u8 colR = 1;
u8 colA = 1;
u8 colB = 1;
u8 colX = 1;
u8 colY = 1;
u8 colAr = 1;
u8 colAb = 1;
u8 colIz = 1;
u8 colDe = 1;

void App1(void){

// si tocamos el sprite y el estado es 0 (0 sin seleccionar, 1 seleccionado) y esta cerrado...
if((Stylus.Newpress) && (PA_SpriteTouched(0)) && (estado == 0) && (abierto == false))
{
// lo animamos
PA_SetSpriteAnim(0,0,1);
// esta seleccionado
estado = 1;
}


// si volvemos a tocarlo se abre
else if((Stylus.Newpress) && (PA_SpriteTouched(0)) && (estado == 1) && (abierto == false))
{
// lo animamos como que ya lo hemos abierto
PA_SetSpriteAnim(0,0,0);
// cramos la ventana y le ponemos el nombre(funciones.h)
nuevaventana("Aplicacion 1");


// esta seleccionado
estado = 0;
// y abierto
abierto = true;
}

// si tocamos la pantalla pero no el sprite y esta seleccionado solo...
else if((Stylus.Newpress) && (estado == 1)){
// le volvemos a animar al frame primero
PA_SetSpriteAnim(0,0,0);
// sin seleccionar
estado = 0;
}


// si esta abierto...
if ((abierto == true)){
//----------------------------------------
// Aquí vamos a meter el codigo de la aplicacion en si
// Mostraremos la posicion del stylus dentro de la ventana, y checkeara si pulsamos algun boton
////----------------------------------------
// ponemos color azul para ese "enunciado"
PA_SetTextTileCol(0, 3);
PA_OutputText(0, 2, 4, "Test stylus:");
// ponemos la posicion del stylus en verde
PA_SetTextTileCol(0, 2);
PA_OutputText(0, 2, 6,"Stylus X: %d ", Stylus.X);
PA_OutputText(0, 2, 7,"Stylus Y: %d ", Stylus.Y);
// otro "enunciado"
PA_SetTextTileCol(0, 3);
PA_OutputText(0, 17, 4, "Test botones:");
// ponemos variables en todos los colores (una para rojo/sinpulsar y otra verde/pulsado)
PA_SetTextTileCol(0, colL);
PA_OutputText(0, 17, 6, "L");
PA_SetTextTileCol(0, colR);
PA_OutputText(0, 25, 6, "R");
PA_SetTextTileCol(0, colA);
PA_OutputText(0, 17, 8, "A");
PA_SetTextTileCol(0, colB);
PA_OutputText(0, 25, 8, "B");
PA_SetTextTileCol(0, colX);
PA_OutputText(0, 17, 9, "X");
PA_SetTextTileCol(0, colY);
PA_OutputText(0, 25, 9, "Y");
PA_SetTextTileCol(0, colAr);
PA_OutputText(0, 17, 11, "Arriba");
PA_SetTextTileCol(0, colAb);
PA_OutputText(0, 25, 11, "Abajo");
PA_SetTextTileCol(0, colIz);
PA_OutputText(0, 17, 13, "Izquierda");
PA_SetTextTileCol(0, colDe);
PA_OutputText(0, 17, 14, "Derecha");
//----------------------------------------
}
//-------------------------------------------------
// AQUI METEREMOS LOS IFS DE NUESTRA SUB_APLICACION
//-------------------------------------------------

//si dejamos pulsado L...
if ((Pad.Held.L)){
colL = 2; // se pone de color verde
}

// si la soltamos...
else if ((Pad.Released.L)){
colL = 1; // se vuelve roja
}

// lo mismo con el R...
if ((Pad.Held.R)){
colR = 2;
}

else if ((Pad.Released.R)){
colR = 1;
}


// lo mismo con la A
if ((Pad.Held.A)){
colA = 2;
}

else if ((Pad.Released.A)){
colA = 1;
}

// lo mismo con el B
if ((Pad.Held.B)){
colB = 2;
}

else if ((Pad.Released.B)){
colB = 1;
}

// lo mismo con el x
if ((Pad.Held.X)){
colX = 2;
}

else if ((Pad.Released.X)){
colX = 1;
}


// lo mismo con la Y
if ((Pad.Held.Y)){
colY = 2;
}

else if ((Pad.Released.Y)){
colY = 1;
}


// lo mismo con Arriba
if ((Pad.Held.Up)){
colAr = 2;
}

else if ((Pad.Released.Up)){
colAr = 1;
}


// lo mismo con Abajo
if ((Pad.Held.Down)){
colAb = 2;
}

else if ((Pad.Released.Down)){
colAb = 1;
}


// lo mismo con Izquierda
if ((Pad.Held.Left)){
colIz = 2;
}

else if ((Pad.Released.Left)){
colIz = 1;
}


// lo mismo con Derecha
if ((Pad.Held.Right)){
colDe = 2;
}

else if ((Pad.Released.Right)){
colDe = 1;
}



//-------------------------------------------------


//-------------------------------------------------
// CERRAMOS LA APLICACION
//-------------------------------------------------


// si cerramos la aplicación...
if ((abierto == true) && PA_SpriteTouched(9)){
// llamamos a la funcion que cierra(funciones.h)
cerrar();

// esta cerrado
abierto = false;
}
//-------------------------------------------------

}

#endif





Captura:

Imagen

Descarga:
http://www.zonahomebrew.com/modules.php ... tit&lid=79


Para añadirle algo tipo inicio de windows, lo mismo que con el archivo del escritorio para crear una ventana, con sprites, un booleanos, y si tocas en la zona que sea, aparecen los sprites y el booleanos pasa a true...

Y con esto hemos terminado ya si todo lo que son las aplicaciones a nivel Facil-Medio.
Ahora vamos a pasar a 2D y aprenderemos todo lo que se puede consegir. Al final sereis capaces de hacer un juego tipo super mario bros o zelda sin problema.

El apartado 2D lo vamos a dividir en dos partes:
1.- Relacionado con los sprites, colisiones, movimientos, scroll, etc...
2.- Aplicar lo anterior junto a leyes fisicas como friccion, aceleracion, gravedad...

Lo que vamos a hacer es como siempre, ejemplo a ejemplo, pero crearemos otro a parte, que sera irle aplicando dia a dia todo lo aprendido a ese ejemplo, como tarea.
Lo podemos orientar hacia juegos tipo zelda, mario bros, etc... Después aremos otro aparte mas chungete que usara leyes fisicas que sera de una moto (o coche si quereis).

Con esto ya podemos hacer el juego que queramos.

Y por ultimo, despues de todo eso, volveremos con las api y daremos un nivel avanzado (escritura y lectura de archivos, mas ejemplos adaptables a SO...)

Y despues ya se vera por el camino...

Antes de terminar el bloque, quiero dar muchisimas gracias a todos los que me an apoyado, an segido mis tutoriales y les an gustado.

Todas las dudas sobre este ultimo ejemplo en el post "general".

Salu2.
PRIMEROOOO!!!!

Ostias, pues lo primero no me ha servido porque ya sabía lo de los booleanos, pero las 2 otras cosas..... MOOOOLA!!!

Pues si que está todo increible..... dentro de "poco" a por un "super mario" !!! :P :P :P

ANIMO, sige en tu estela! [oki]

[plas]
PiratePila está baneado por "crearse clones para trollear"
Me lo he mirado por encima y esta bien, gracias por esta ultima entrega (¿que explicarás en la siguiente?).

Luego me la miraré más a fondo e intentaré crear un menú, a ver que tal.
PiratePila escribió:gracias por esta ultima entrega (¿que explicarás en la siguiente?).


Si, si, gracias pero no te lo has leido.... xDDD

Ha dicho que trabajaremos en el siguiente bloque con 2D, lo subidvidirá en 2 partes
Y tengo una buena noticia tambien para la mayoria... Ahora teneis un dominio básico de C.
Esto os va a servir a la hora de aprender a programar en otra plataforma, solo con mirar un poco las funciones de la libreria os sobra.

Igual voy a hacer tambien unos tutoriales de programacion para wii. Si os interesa me pondre manos a la obra.

salu2
Plata escribió:Igual voy a hacer tambien unos tutoriales de programacion para wii. Si os interesa me pondre manos a la obra.


No tengo wii así que NO, además, te robaría tiempo para estos tutoriales y ademas suena infinitamente mucho más complicado que los de DS (ya que es algo más sencillo.....)

Prefiero seguir como va la cosa. He dicho

[beer]
judelco escribió:
Plata escribió:Igual voy a hacer tambien unos tutoriales de programacion para wii. Si os interesa me pondre manos a la obra.


No tengo wii así que NO, además, te robaría tiempo para estos tutoriales y ademas suena infinitamente mucho más complicado que los de DS (ya que es algo más sencillo.....)

Prefiero seguir como va la cosa. He dicho

[beer]


Menudos apoyos ^^ ¿No tienes wii? que pena... [poraki]

iva a segir haciendo de ds igualmente, y con la misma frecuencia(o sea, cuando me aburro y no se que hacer) XD , de todas formas tendria que estudiarme un poco las librerias (seguramente agarraré GRLIB) y ya...

Si te suena infinitamente dificil en wii(para nada) simplemente no sigas los tutoriales si los saco... xD

P.D: Soy el unico que preferia mil veces mas el estilo del "antiguo" eol...??? ¡Manifestacion! xD
judelco escribió:
Plata escribió:Igual voy a hacer tambien unos tutoriales de programacion para wii. Si os interesa me pondre manos a la obra.


No tengo wii así que NO, además, te robaría tiempo para estos tutoriales y ademas suena infinitamente mucho más complicado que los de DS (ya que es algo más sencillo.....)

Prefiero seguir como va la cosa. He dicho

[beer]


En primer lugar, gracias por seguir con los tutoriales, a más de uno le serán útiles. :P Podrías haber explicado funciones que no sean void, no hay mucha diferencia.

Judelco, yo te diría que programar la Wii es incluso más fácil que la DS, ya que no tiene una limitación tan grande con la RAM de que dispones. Es más parecido a programar un ordenador.

Si quieres, Plata, no sería mala idea, pero es mejor esperar a unas Libogc "definitivas", no empezar con las actuales que están en desarrollo. De todos modos la decisión la tomas tú, jejeje.
Bueno, solo era MI opinion.......

Ou con no tener wii..... a joderse.... no tengo niguna consola de esta generación.... me he quedado en la gamecube-nintendo ds... aunque la gamecube la tengo superabandonada..... pero la DS NO LA SUELTO!!!! xDD

PD: Yo si apoyo al anterior estilo de elotrolado.... vamos... el antiguo... aunque no digo que no al cambio de web (pero eso de fondo blanco ..... NO! xD)

Bye! [bye]
PiratePila está baneado por "crearse clones para trollear"
judelco escribió:
PiratePila escribió:gracias por esta ultima entrega (¿que explicarás en la siguiente?).


Si, si, gracias pero no te lo has leido.... xDDD

Ha dicho que trabajaremos en el siguiente bloque con 2D, lo subidvidirá en 2 partes


Ya dije que solo me lo he mirado por encima (tu no me has leído XD). Mañana me pondré a ello.
Plata gracias x estos tutos ahora podre seguir fardando con lo q aprendo gracias a ty. Oye que lo de wii siga adelante XD

Saludos
A mi me falla en el codigo del menu del Abe's Appocalypse. La cuestion es que al pulsar START salga el menu, junto a un sonido, al pulsar B como si se le diese a CONTINUAR, junto a un sonido y pulsar la palabra CONTINUAR para que haga la misma funcion del boton B. Pero haciendo el touching(usar la pantalla tactil) desaparecen las dos opciones(bien) pero luego cuando quiero iniciar el menu se me inicia(se reproduce el sonido) pero no muestra las palabras por mucho que le doy. Dejo el código a ver si encontrais el fallo:
// Includes
#include <PA9.h>       // Include de PA_Lib
#include <electro.h>   // Include del sonido
// Funcion main()
int main(int argc, char ** argv)
{
   PA_Init();         // Iniciar PA_Lib
   PA_InitVBL();      // Iniciar VBL
   PA_InitText(0, 3); // Iniciar texto en pantalla principal, BG 0
   PA_InitText(1, 3); // Iniciar texto en pantalla superior, BG 0   
   PA_InitSound();    // Iniciar el sistema de sonido(para el sonido del menu)
   bool menu;         // Crear bool del menu
   menu = false;      // Ponemos el menu en false
   PA_OutputText(1, 0, 0, "Pulsa START para iniciar el menu");
   
   // Loop infinito
   while (1)
   {
      if((Pad.Newpress.Start) && (menu == false)) // Si pulsamos Start y menu está en false...
         {
              menu = true;                         // Ponemos el menu en true
              PA_PlaySimpleSound(electro);         // Reproducimos el sonido
              PA_OutputText(0, 15, 1, "CONTINUAR"); // Texto continuar
              PA_OutputText(0, 13, 23, "APAGAR");    // Texto apagar
         }
      if((Pad.Newpress.B) && (menu == true))
         {
              menu = false;
              PA_PlaySimpleSound(electro);
              PA_OutputText(0, 15, 1, "           ");
              PA_OutputText(0, 13, 23, "           ");
         }      
      if(((Stylus.X>120) && (Stylus.X<192) && (Stylus.Y>8) && (Stylus.Y<16)) && (menu == true))      // Si el menu esta abierto y se pulsa la pantalla...
         {
              menu = false;
              PA_PlaySimpleSound(electro);
              PA_OutputText(0, 15, 1, "           ");
              PA_OutputText(0, 13, 23, "           ");
         }     
      {
         PA_WaitForVBL();
      }                  
   }   
   return 0;
} // Fin de main()


PosData: Gran tuto Plata, justo lo que necesitaba =D
Lo primero NUNCA cambies el valor del booleano y pongas la accion (dentro del if), azlo al reves.

La cuestion es que no se de donde te as inventao tu que se puede usar el mismo booleano para mas menus.

Lee, asimila el tutorial y te daras cuenta de que necesitas un booleano mas para ese tercer menú...


salu2
Plata escribió:Lo primero NUNCA cambies el valor del booleano y pongas la accion (dentro del if), azlo al reves.


Eso iba a decirle yo.... que dentro de un if o while si hay booleanos y se cambian, que lo ponga al final de las instrucciones, sino me parece que hace cosas raras... xD
He intentado incluir ambas funciones en un solo if, pero no se que comando se usa para decir X o Y, donde X es un mandato e Y es otro. ¿Sabéis cuál es?
alexpowerup escribió:He intentado incluir ambas funciones en un solo if, pero no se que comando se usa para decir X o Y, donde X es un mandato e Y es otro. ¿Sabéis cuál es?


Eso sería con XOR, pero como no me se el símbolo yo pondría ((!(X && Y)) && (X || Y)): ((No (X y Y)) y (X o Y))

PD: Esto es una chorrada, mil veces mejor XOR directamente...
LOL??????????? no te he entendido na u.u que quieres hacer?

te refieres a si el stylus x = a lokesea y Y = alokesea... pasa tal cosa??
Querrá decir que X = menu == true; Y = juego == true, por ejemplo. ¿No?
No, haber. Si mirais el código lo que quiero es al pulsar START el menú se abra, y desde ese momento:
-Si pulso B el menú se cierra.
-Si toco con el Stylus la palabra CONTINUAR, se cierra el menú.
Pero hay un problema: con el boton B me cierra el menu y luego me lo abre bien. Pero con el stylus cierra el menu pero no se muestran las palabras. También he probado a poner la igualdad del bool al final, pero sigue sin funcionarme ò.ó

Si quereis probarlo probad a compilarlo, a ver si os va.

PD:Estoy usando DesMuMe, igual tiene algo que ver, ¿no?
Desmume se lo recomiendo solo a los que me caen mal. xD
Pero no creo que sea por eso.
Lo que quieres hacer es un menú tipo inventario no?
Plata escribió:Desmume se lo recomiendo solo a los que me caen mal. xD
Pero no creo que sea por eso.
Lo que quieres hacer es un menú tipo inventario no?


El No$GBA es mejor, cierto?

:-?
judelco escribió:El No$GBA es mejor, cierto?


A mi me parece que sí. El desmume lo bueno que tiene es que puede emular el acceso al FAT (creo que solo lectura), por lo demás...
Estoy intentando hacer un menú normal, de tipo "Empezar Juego", "Opciones" y demás pero no lo consigo.

¿ Podrías poner un ejemplo ?

Es que basicamente eso, que es lo que quiero, no viene explicado en el tutorial y no consigo sacarlo...
yo creo que el mejor es el no$gba si no quieres meter reset.
Si es así ponte con el iDeas ...
Kawaguchi_23 escribió:Estoy intentando hacer un menú normal, de tipo "Empezar Juego", "Opciones" y demás pero no lo consigo.

¿ Podrías poner un ejemplo ?

Es que basicamente eso, que es lo que quiero, no viene explicado en el tutorial y no consigo sacarlo...


La verdad es que SI viene explicado. Pero si has leido el tuto y lo has comprendido, y no sabes hacer un menú.... chungo.

Empieza con algo más facil...

Rigle escribió:yo creo que el mejor es el no$gba si no quieres meter reset.
Si es así ponte con el iDeas ...


Si alguien quiere hacer un reset (como yo hice en el homebrew del hilo de rigle y mio) que NO use el No$Gba, que el emulador no lo ve con buenos ojos (se cuelga)

Os recomiendo para los homebrews, el IDEAS, ya que los he probado todos y no ha dado JAMÁS ningun problema con ningun juego homebrew. (ojo, mientras no necesite leer fat....)

Bye! [angelito]
alexpowerup escribió:He intentado incluir ambas funciones en un solo if, pero no se que comando se usa para decir X o Y, donde X es un mandato e Y es otro. ¿Sabéis cuál es?


Para que la condición haga X ó Y se debe usar el operador "||" (sin comillas obviamente).
Por ejemplo, para lo de salir del menú que tienes hecho sería algo así:

if( (Pad.Newpress.B || Stylus.X>120 && Stylus.X<192 && Stylus.Y>8 && Stylus.Y<16)  &&  menu == true )
{
...
}


Eso se traduciría como:

Si Pulsas B ó Stylus pulsado entre coordenadas tal y tal, y además de una de estas dos condiciones el menú esta en true.

Además te he simplificado un poco el tema de los paréntesis, que no hacen falta tantos aunque den seguridad.
Dentro de una condición primero se comprueban los && y luego los ||, así que tal y como te lo he puesto ahí no debería dar problemas.

Espero que te haya sido de ayuda ;) . Por cierto, no estoy muy puesto con esto de la programación con PALib, me puse hace unos meses a empezar con los tutos del la wiki pero ZAS epoca de examenes [sonrisa] asi que tuve que dejarlo, pero este verano seguramente veais por aqui algun que otro proyectillo mio :D .

Y ya que estoy, dar la enhorabuena a Plata que se curra mucho los tutoriales y de forma totalmente desinteresada ;).

Un saludo!
Alber_h escribió:Por cierto, no estoy muy puesto con esto de la programación con PALib, me puse hace unos meses a empezar con los tutos del la wiki pero ZAS epoca de examenes [sonrisa] asi que tuve que dejarlo, pero este verano seguramente veais por aqui algun que otro proyectillo mio :D


Jejejejej, que casualidad. Yo estoy en 2o de Bach y claro, ahora estamos con las recuperaciones..... no puedo hacer nada ni enteretenerme con esto hasta dentro de 1 día minimo (mañana seguiré [sati] ), y dentro de 1-2 semanas pues tendré seguro el tiempo a jornada completa con esto xDD

PD: Mi proyecto será un Zelda EN CONDICIONES (uno similar al "a link to the past"). Creo que puedo tardar meses (o años [sati] ).... xDDD

Bye! [beer]
Plata escribió://-------------------------------------------------
// AQUI METEREMOS LOS IFS DE NUESTRA SUB_APLICACION
//-------------------------------------------------

//si dejamos pulsado L...
if ((Pad.Held.L)){
colL = 2; // se pone de color verde
}

// si la soltamos...
else if ((Pad.Released.L)){
colL = 1; // se vuelve roja
}

// lo mismo con el R...
if ((Pad.Held.R)){
colR = 2;
}

else if ((Pad.Released.R)){
colR = 1;
}


Quería hacerte un comentario sobre esta función. Se que solo es un ejemplo pero estaría bien señalarlo ya que igual viene bien a alguien.
Si el codigo con el que das el valor del color a la variable lo ejecutas en un Pad.Held, a cada fotograma que pase y esté pulsado ese botón se asignará ese valor a la variable. Esto igual no se nota, pero el rendimiento sería mayor si en vez de asignar el color en un Held lo hicieras en un Newpress, ya que así lo asigna una sola vez, al momento de pulsar, y no a cada fps que lo tengas pulsado. Igual en algo tan simple no se nota mucho, pero si por ejemplo se ejecutara una función mas compleja si que haría bajar el rendimiento.

Otro consejo, y esto ya es algo más en cuanto a orden/elegancia del código [sonrisa], tanto en las condiciones como los bucles cada uno de los elementos no tiene por qué ir dentro de paréntesis, y si la sentencia a ejecutar (ya sea dentro de una condicion o un bucle) es solo una, se puede poner a continuación sin necesidad de las llaves { }.
Por ejemplo, esto:
if ((Pad.Held.L)){
colL = 2; // se pone de color verde
}

Puede ponerse perfectamente así:
if(Pad.Held.L)
   colL = 2;

o incluso así:
if(Pad.Held.L) colL = 2;


Como puedes ver queda más limpio y fácil de leer, y sobre todo ahorrarás líneas de código ;)

judelco escribió:Jejejejej, que casualidad. Yo estoy en 2o de Bach y claro, ahora estamos con las recuperaciones..... no puedo hacer nada ni enteretenerme con esto hasta dentro de 1 día minimo (mañana seguiré [sati] ), y dentro de 1-2 semanas pues tendré seguro el tiempo a jornada completa con esto xDD

PD: Mi proyecto será un Zelda EN CONDICIONES (uno similar al "a link to the past"). Creo que puedo tardar meses (o años [sati] ).... xDDD

Bye! [beer]


Yo también estoy de exámenes ahora mismo. Estoy cursando primero de DAI, por eso quiero ponerme cuanto antes con las palib, que ya me llevo bastante bien con C y quiero probar unas cosillas XD.

Salu2!
judelco escribió:
Alber_h escribió:Por cierto, no estoy muy puesto con esto de la programación con PALib, me puse hace unos meses a empezar con los tutos del la wiki pero ZAS epoca de examenes [sonrisa] asi que tuve que dejarlo, pero este verano seguramente veais por aqui algun que otro proyectillo mio :D


Jejejejej, que casualidad. Yo estoy en 2o de Bach y claro, ahora estamos con las recuperaciones..... no puedo hacer nada ni enteretenerme con esto hasta dentro de 1 día minimo (mañana seguiré [sati] ), y dentro de 1-2 semanas pues tendré seguro el tiempo a jornada completa con esto xDD

PD: Mi proyecto será un Zelda EN CONDICIONES (uno similar al "a link to the past"). Creo que puedo tardar meses (o años [sati] ).... xDDD

Bye! [beer]



mi proyecto será...una aplicación que merezca la pena :S
Rigle escribió:
judelco escribió:
Alber_h escribió:Por cierto, no estoy muy puesto con esto de la programación con PALib, me puse hace unos meses a empezar con los tutos del la wiki pero ZAS epoca de examenes [sonrisa] asi que tuve que dejarlo, pero este verano seguramente veais por aqui algun que otro proyectillo mio :D


Jejejejej, que casualidad. Yo estoy en 2o de Bach y claro, ahora estamos con las recuperaciones..... no puedo hacer nada ni enteretenerme con esto hasta dentro de 1 día minimo (mañana seguiré [sati] ), y dentro de 1-2 semanas pues tendré seguro el tiempo a jornada completa con esto xDD

PD: Mi proyecto será un Zelda EN CONDICIONES (uno similar al "a link to the past"). Creo que puedo tardar meses (o años [sati] ).... xDDD

Bye! [beer]



mi proyecto será...una aplicación que merezca la pena :S


Haz una calculadora, yo lo estaba pensando y la verdad es que no es dificil.... es resulton esa aplicación y no es imposible ni por asomo...

HAZ UNA CALCULADORAAA
Me ha surgido una duda respecto al post principal.
En la parte en la que declara la función void App1(void) (es la ultima que hace), como es que declara las variables fuera de la función? No deberían ir dentro de ésta?

Salu2!
Alber_h escribió:Me ha surgido una duda respecto al post principal.
En la parte en la que declara la función void App1(void) (es la ultima que hace), como es que declara las variables fuera de la función? No deberían ir dentro de ésta?

Salu2!


Las declara fuera para que sean variables globales y no locales para la función App1. Si no has entendido esto, sinceramente ponte a estudiar un poco de C básico antes de ponerte con Palib o lo que sea. No te lo digo con mala intención ni segundas, es un consejo ya que sino no te vas a enterar de nada. Para avanzar lo mejor es empezar por la base de la pirámide, ya que todo se va a sustentar en ella.

Este es un tutorial muy majo, sencillo y fácil de seguir, de C básico: http://www.elrincondelc.com/cursoc/cursoc.html
weno , yo tambien he decidido hacer algun tuto de lo que sé hacer xD
Paco20011 escribió:
Alber_h escribió:Me ha surgido una duda respecto al post principal.
En la parte en la que declara la función void App1(void) (es la ultima que hace), como es que declara las variables fuera de la función? No deberían ir dentro de ésta?

Salu2!


Las declara fuera para que sean variables globales y no locales para la función App1. Si no has entendido esto, sinceramente ponte a estudiar un poco de C básico antes de ponerte con Palib o lo que sea. No te lo digo con mala intención ni segundas, es un consejo ya que sino no te vas a enterar de nada. Para avanzar lo mejor es empezar por la base de la pirámide, ya que todo se va a sustentar en ella.

Este es un tutorial muy majo, sencillo y fácil de seguir, de C básico: http://www.elrincondelc.com/cursoc/cursoc.html


Ya bueno, pensé que sería eso pero quería asegurarme. Llevo cerca de un año programando en C debido a mis estudios y mas tiempo por cuenta propia, que no es mucho mucho tiempo, pero creo que una "base" si que tengo (vamos que me se manejar con listas dinámicas, ficheros etc...). Se que la pregunta es sobre algo muy básico pero vaya, nunca me había topado con esto. Aparte aclararte que no es que no lo haya entendido, simplemente no sabía por qué las declara fuera de la función ya que el no lo ha explicado (o al menos no me ha parecido verlo). Una vez aclarado esto, ya que estamos, un poco más de información (si no es mucho pedir [sonrisa]): Si declaro una variable global en el main.c, puedo acceder a ella asi como modificarla desde por ejemplo un mis_funciones.c con funciones que yo tenga aparte? Y si fuera al contrario? Vienen a ser como un #define pero que se puede modificar no?
Alber_h escribió:Ya bueno, pensé que sería eso pero quería asegurarme. Llevo cerca de un año programando en C debido a mis estudios y mas tiempo por cuenta propia, que no es mucho mucho tiempo, pero creo que una "base" si que tengo (vamos que me se manejar con listas dinámicas, ficheros etc...). Se que la pregunta es sobre algo muy básico pero vaya, nunca me había topado con esto. Aparte aclararte que no es que no lo haya entendido, simplemente no sabía por qué las declara fuera de la función ya que el no lo ha explicado (o al menos no me ha parecido verlo). Una vez aclarado esto, ya que estamos, un poco más de información (si no es mucho pedir [sonrisa]): Si declaro una variable global en el main.c, puedo acceder a ella asi como modificarla desde por ejemplo un mis_funciones.c con funciones que yo tenga aparte? Y si fuera al contrario? Vienen a ser como un #define pero que se puede modificar no?


Lo del tutorial era sólo por si acaso, ya te dije que no lo decía con segundas ni nada.

Sí puedes declarar variables globales y estarán disponibles en los "includes" que hagas. Pero siempre con cuidado con el orden, si declaras una variable después de hacer un include "funciones.c", ese archivo de funciones no "verá" la variable.

Así que lo mejor sería hacer un include "variables_globales.h" por ejemplo, con las variables globales (o puedes usar el main.h si lo cargas lo primero). Luego todos los includes por debajo de él deberían ver las variables que has declarado arriba. Es como las funciones o los defines. Tienes que declararlos antes de usarlos.
Paco20011 escribió:...


Ok, gracias por molestarte en explicarme eso. Y perdona por el pequeño rebote que me cojí :-|.

Salu2!
Alber_h escribió:
Paco20011 escribió:...


Ok, gracias por molestarte en explicarme eso. Y perdona por el pequeño rebote que me cojí :-|.

Salu2!


Nada nada xDD si es que por pocas ganas que tenía de escribir no dejé claro que la intención era ofrecer un tutorial por si no controlabas de C, no otra cosa. Y lo puse directamente porque así a alguien le puede ir bien. No era decirte que no sabías ni nada de eso, ya que no te conozco y no sé si controlas de programación o no.

:)
Alber_h escribió:
Paco20011 escribió:
Alber_h escribió:Me ha surgido una duda respecto al post principal.
En la parte en la que declara la función void App1(void) (es la ultima que hace), como es que declara las variables fuera de la función? No deberían ir dentro de ésta?

Salu2!


Las declara fuera para que sean variables globales y no locales para la función App1. Si no has entendido esto, sinceramente ponte a estudiar un poco de C básico antes de ponerte con Palib o lo que sea. No te lo digo con mala intención ni segundas, es un consejo ya que sino no te vas a enterar de nada. Para avanzar lo mejor es empezar por la base de la pirámide, ya que todo se va a sustentar en ella.

Este es un tutorial muy majo, sencillo y fácil de seguir, de C básico: http://www.elrincondelc.com/cursoc/cursoc.html


Ya bueno, pensé que sería eso pero quería asegurarme. Llevo cerca de un año programando en C debido a mis estudios y mas tiempo por cuenta propia, que no es mucho mucho tiempo, pero creo que una "base" si que tengo (vamos que me se manejar con listas dinámicas, ficheros etc...). Se que la pregunta es sobre algo muy básico pero vaya, nunca me había topado con esto. Aparte aclararte que no es que no lo haya entendido, simplemente no sabía por qué las declara fuera de la función ya que el no lo ha explicado (o al menos no me ha parecido verlo). Una vez aclarado esto, ya que estamos, un poco más de información (si no es mucho pedir [sonrisa]): Si declaro una variable global en el main.c, puedo acceder a ella asi como modificarla desde por ejemplo un mis_funciones.c con funciones que yo tenga aparte? Y si fuera al contrario? Vienen a ser como un #define pero que se puede modificar no?


aunque la verdad sea que enseño tambien c a parte de palib, teoricamente lo que enseño son las librerias, no c, asi que habrá cosas de c que no explique porque sea un coñazo muy largo (en este caso poque declaro hay esa funcion, o lo de multiarchivo, aunque la verdad esto ultimo a sido un poco pereza xD)

Por cierto, en 2d hay cosas de c y c++, (estructuras, arrays...) que no voy a explicar (no es nada del otro mundo), y que podeis aprender un poco si teneis curiosidad en el wiki de palib.(no es muy dificil usarlo aunque no lo comprendas)

salu2
Plata escribió:Por cierto, en 2d hay cosas de c y c++, (estructuras, arrays...) que no voy a explicar (no es nada del otro mundo), y que podeis aprender un poco si teneis curiosidad en el wiki de palib.(no es muy dificil usarlo aunque no lo comprendas)

salu2


No si está muy bien... pero para programar lo esencial es comprender lo que estás haciendo. De nada sirve crear structs o arrays si no sabes ni lo que haces ni para que te pueden servir... Y no te digo a ti, sino al que esté aprendiendo.

Salu2!
Alber_h escribió:No si está muy bien... pero para programar lo esencial es comprender lo que estás haciendo. De nada sirve crear structs o arrays si no sabes ni lo que haces ni para que te pueden servir... Y no te digo a ti, sino al que esté aprendiendo.

Salu2!


Uf, eso es completamente cierto....

No te imaginas lo que he tenido que liar para montar un botón que cuando lo pulses me cambie el sprite y conserve la posición para que en el "visor de sprites" que estoy haciendo permita el cambio de tener o no escudo y que en el modo de escudo, permita atacar con la espada (que por cierto, ya está hecho). He puesto como 1 página enterita de códigos y ya estoy ordenando los archivos .h por carpetas, porque eran tantos en la carpeta "source" que he tenido que subdividirlos xDDD

Lo curioso es que en todo ese código que me he tenido que invertar en un momento, solo me haya comido un ";" xDD

En fin, aprended a usad lo que leais, pero sobre todo, COMPRENDERLO, o vais mal.....

PD: Por la noche, se me va la olla y sueño con las soluciones a mis problemas, como por ejemplo la de "como carajo pongo para que la espada y solamente la espada (no link) haga daño a los futuros enemigos?" pues esas "chorradas" que no se por donde cogerlas se me ocurren soluciones (a veces muy buenas o a veces chapuzeras) por la noche por la cara XD

Bueno, que os vaya muy bien..... yo ya estoy metiendole más y más sprites.... mola xD

PD2: Una imagen de muestra:

Imagen

Bye! [bye]
Alber_h escribió:
Plata escribió:Por cierto, en 2d hay cosas de c y c++, (estructuras, arrays...) que no voy a explicar (no es nada del otro mundo), y que podeis aprender un poco si teneis curiosidad en el wiki de palib.(no es muy dificil usarlo aunque no lo comprendas)

salu2


No si está muy bien... pero para programar lo esencial es comprender lo que estás haciendo. De nada sirve crear structs o arrays si no sabes ni lo que haces ni para que te pueden servir... Y no te digo a ti, sino al que esté aprendiendo.

Salu2!


Como comprenderas, yo enseño palib, no c ni c++, asi que quiero decir que aprendan por su cuenta ese poquito.
El que le interese de verdad esto va a buscar info por su cuenta, y el que no, diga lo que diga, va a hacer lo que le de la gana, asin ke...
Ese homebrew esta muy bien, parece que te has esforzado bastante =D. Pero parece que por las prisas te has pasado la hortojraphya por el forro xD. Es button, no buttom xD
alexpowerup escribió:Ese homebrew esta muy bien, parece que te has esforzado bastante =D. Pero parece que por las prisas te has pasado la hortojraphya por el forro xD. Es button, no buttom xD



eso seguro k es un bug xDxDxD
Plata escribió:
Alber_h escribió:
Plata escribió:Por cierto, en 2d hay cosas de c y c++, (estructuras, arrays...) que no voy a explicar (no es nada del otro mundo), y que podeis aprender un poco si teneis curiosidad en el wiki de palib.(no es muy dificil usarlo aunque no lo comprendas)

salu2


No si está muy bien... pero para programar lo esencial es comprender lo que estás haciendo. De nada sirve crear structs o arrays si no sabes ni lo que haces ni para que te pueden servir... Y no te digo a ti, sino al que esté aprendiendo.

Salu2!


Como comprenderas, yo enseño palib, no c ni c++, asi que quiero decir que aprendan por su cuenta ese poquito.
El que le interese de verdad esto va a buscar info por su cuenta, y el que no, diga lo que diga, va a hacer lo que le de la gana, asin ke...


Ya, si eso esta claro, no me referia al contenido del tutorial, sino al que lo este siguiendo sin tener ni idea, que por mucho que se aprenda puede que siga sin entender ni papa xD.

Salu2!
como vereis soy nuevo en el foro, os veo que sois unos makinas, y yo sin embargo un aprendiz.
os agradezco todo lo que haceis para ayudar a los novatillos.
antoniojesusnc escribió:como vereis soy nuevo en el foro, os veo que sois unos makinas, y yo sin embargo un aprendiz.
os agradezco todo lo que haceis para ayudar a los novatillos.


Pues nada, bienvenido al foro y espero que aprendas mucho con los tutos (no empieces por este.... no me seas masoca xD)

Empieza mirandote el Tuto 01 para instalar lo necesario y si tienes problemas mira los comentarios de los users primero, que lo más seguro es que ese problema se haya solucionado.....

[oki]
Plata te amooooooooooooooo [amor] [amor] [amor]

xDDDDD

No, en serio, es que hace ya mucho tiempo intenté empezar a programar en DS, pero entonces tutoriales había los justos y en inglés, y el devKitPro no me tiraba hiciera lo que hiciera. Pero siguiendo tus tutoriales (que me los he zampado hasta el 8 en 2 días xD) ya he creado mis primeros programitas cutres (algo tan simple como poner un puntero y que al tocar con la táctil, éste siga al stylus me producía una felicidad que quien me viera pensaría que estoy loco xD).

Lo malo es que tengo la selectividad dentro de 3 días y me he viciado terriblemente tus tutos y no quiero joderla en selectividad jajaj (aunque tengo un 9 de media en bach y ya me sale la nota para informática, pero por no bajar la media...).

Pero bueno, este no es el caso. El caso es que con lo poquito que sabía de C y tus tutoriales de PAlib, por fin sé hacer algo y espero que sigas con estos tutoriales, que valen muchísimo para los principiantes como yo.

A ver si este verano tengo tiempo y me pongo con algo chulo jejeje.

Lo que quería decir es: GRACIAS! y que por favor, no dejes de hacerlos.

Saludos!
PRUC|-| escribió:Plata te amooooooooooooooo [amor] [amor] [amor]


Una de tres:
-Eres maricón
-Crees que Plata es la "SuperWoman" que está en la imagen
-Estabas de cachondeo

[tomaaa]
alexpowerup escribió:
PRUC|-| escribió:Plata te amooooooooooooooo [amor] [amor] [amor]


Una de tres:
-Eres maricón
-Crees que Plata es la "SuperWoman" que está en la imagen
-Estabas de cachondeo

[tomaaa]


-Ser "maricón" no tiene nada de malo.
-La superwoman de su imagen me la suda.
-Sí, estaba cachondeando. ¿No se nota? ¬¬
53 respuestas
1, 2