[NDS][Programación con Palib] 6. Movimiento de sprites y utilización de stylus y pad

Foro dedicado a las aplicaciones y hardware de la scene (no flash carts)

Moderador: eGladiator

Plata
Avatar de usuario
Fumando petabytes!!
 
Mensajes: 1276
Registrado: 27 Dic 2006
Ubicación: Debajo de un puente

Mensajepor Plata 09 Dic 2007 19:30

1. Movimiento de sprites tipo ratón

Ahora aprenderemos a mover un sprite con el stylus como si fuera un ratón.

Crearemos otro ejercicio.
En la carpeta source creamos la carpeta gfx y un sprite, por ejemplo un raton.
Yo use este:

Imagen

A la paleta la llamaremos sprite 0 y al sprite yo le he llamado raton y lo he guardado en png.

(todo esto explicado en el tutorial anterior, para los que cojen solo lo que les interesa de los tutos)

El pagfx quedaria así:
#TranspColor magenta

#Sprites :
raton.PNG 256colors sprite0


#Backgrounds :


Ahora vamos al código:
// Includes
#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 PA_Lib
PA_InitVBL(); // Iniciamos VBL
PA_LoadSpritePal(0, 0, (void*)sprite0_Pal); // Cargamos la paleta

PA_CreateSprite(0, 0,(void*)raton_Sprite, OBJ_SIZE_32X32,1, 0, 50, 50); //cargamos el sprite

//Bucle
while(1)
{
//actualizo la posición del sprite
PA_SetSpriteXY(0, //pantalla
0, //numero del sprite
Stylus.X-16, //Posicion de X. Le resto 16 porque sino no aparece correctamente el raton respecto al stylus
Stylus.Y-16 //Posicion de Y. Lo mismo
);
PA_WaitForVBL();
}

return 0;
} //Fin de main()


Y ya ta.

Captura:

Imagen

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

2. Movimiento de varios sprites (Tipo Mr. Potato)

De aquí pues hize una demo de esto aquí:
http://www.elotrolado.net/hilo_Mr--Potato_899305


MUY IMPORTANTE: Antes de seguir lee esto:
http://www.palib.info/wiki/doku.php?id=day2es
No quiero hacer mas largo el hilo.


Empezamos!!!

Nuevo ejercicio, nueva carpeta de gráficos.
Usaremos el sprite del ejercicio anterior con la misma configuracion de pagfx. (Copy and paste).

Pasamos al código:
// Includes
#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 PA_Lib
PA_InitVBL(); // Iniciamos VBL

u8 i = 0; // variable


// iniciamos la paleta
PA_LoadSpritePal(0, 0, (void*)sprite0_Pal);

for //una variante de while (bucle)
//condicion
(i = 0; // si el valor de i (variable) es igual a 0
i < 4; // y es menor que 4...
i++) // sube su valor un numero

/*Asi de golpe no tiene mucho sentido y es muy largo de explicar, recomiendo leer el
enlace de mas arriba*/




//creamos los sprites
PA_CreateSprite(0, i,(void*)raton_Sprite, OBJ_SIZE_32X32,1, 0, 4, 3);



// Bucle
while (1)
{

for (i = 0; i < 4; i++) // lo mismo que mas arriva
PA_MoveSprite(i); // esto hace que el sprite que quieras, por ejemplo, el numero uno, lo pones en los () y el sprite que tenga ese numero se puede mover, lo sustituimos por la variable para mover todos los sprites creados.


PA_WaitForVBL();
}

return 0;
} // Fin de main


Y cada ratón se mueve por su cuenta.

Captura:

Imagen

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

3. Movimiento de un sprite con el pad
Nuevo ejercicio, otra vez el mismo sprite y empezamos.

Código:
//Includes
#include
#include "gfx/all_gfx.c"
#include "gfx/all_gfx.h"

s32 x = 0; s32 y = 0; // Declaramos la posicion del sprite

//Funcion main()
int main(void){

PA_Init(); //Iniciamos Palib
PA_InitVBL(); // Iniciamos VBL


//Cargamos la paleta
PA_LoadSpritePal(0, 0, (void*)sprite0_Pal);

//Creamos el sprite
PA_CreateSprite(0, 0,(void*)raton_Sprite, OBJ_SIZE_32X32,1, 0, 0, 0);

//Bucle
while(1){

// Actualizamos la posicion del sprite con la del pad
x += Pad.Held.Right - Pad.Held.Left;
y += Pad.Held.Down - Pad.Held.Up;

// Actualizamos la posicion del sprite
PA_SetSpriteXY(0, 0, x, // Posición de x (declarada anteriormente)
y); // Posición de y...

PA_WaitForVBL();
}
return 0;
} //Fin de main


Y asi moveremos el sprite con el pad.

Captura:

Imagen

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

También puedes usar las teclas y todo, hay un ejemplo en la ruta C:\devkitPro\PAlibExamples\Input\Pad.

Y ahí se queda la lección.

------------------------------Tarea-----------------------------------------
Intentad hacer un mini OS, se trata de un fondo y el raton (nada del otro mundo).

Captura:

Imagen

No lo pongo por ahora a descarga.
Quiero ver vuestras capturas propias.


Salu2

El proximo... me lo pensare. xD (Dadme ideas)
Ultima edición por Plata el 30 Ene 2008 17:59, editado 1 vez

DiegoX
Avatar de usuario
MegaAdicto!!!
 
Mensajes: 767
Registrado: 11 Mar 2007
Ubicación: Madrid

Mensajepor DiegoX 09 Dic 2007 19:37

Perfecto como siempre. El Winwous X D está genial. 5 starz!

Antunez
Avatar de usuario
MegaAdicto!!!
 
Mensajes: 2412
Registrado: 04 Jul 2007
Ubicación: Sevilla

Mensajepor Antunez 09 Dic 2007 20:26

Ya se va complicando la cosa... a ver si mañana lo hago, que ahora no estoy en el PC en el que tengo instalado todo el tema este...
El siguiente podrías hacerlo de interacción entre sprites y etc... (con lo de interacción me refiero, a que sí por ejemplo tenemos una línea y un cochecito, que cuando el cochecito toque la línea desaparezca y cosas de esas...).

Plata
Avatar de usuario
Fumando petabytes!!
 
Mensajes: 1276
Registrado: 27 Dic 2006
Ubicación: Debajo de un puente

Mensajepor Plata 09 Dic 2007 20:49

Antunez escribió:Ya se va complicando la cosa... a ver si mañana lo hago, que ahora no estoy en el PC en el que tengo instalado todo el tema este...
El siguiente podrías hacerlo de interacción entre sprites y etc... (con lo de interacción me refiero, a que sí por ejemplo tenemos una línea y un cochecito, que cuando el cochecito toque la línea desaparezca y cosas de esas...).


colisiones?
salu2

f3nrir
Avatar de usuario
Adicto
 
Mensajes: 139
Registrado: 28 Sep 2007
Ubicación: Chile :3

Mensajepor f3nrir 09 Dic 2007 21:45

no me pude esperar a este tutorial y me puse a investigar por mi cuenta [+risas]

pero mas o menos este es mi resultado

Imagen

el fondo es la chica y los sprites en movimiento serian la ropa y el pelo ;)

http://rapidshare.com/files/75447481/test2.nds.html

judelco
Avatar de usuario
Scarlet Devil
 
Mensajes: 2450
Registrado: 21 Jun 2007
Ubicación: Málaga!!!

Mensajepor judelco 10 Dic 2007 17:10

Ostras!!!! Esto se va complicando lo suyo!!!

2 cosas:

1- AUN no he conseguido que se hagan "amigos" los fonts personalizados con los fondos de pantalla.

2- Lo del enlace que hay que leerse.... hay que leerselo TODO??????

Me parece que este tutorial va a durar 1 semanita... XD

PD: Am! 5 stars, of course!

Sigue asi! :p

EDIT1: Ya he hecho el 1, es fácil... solo que el que más me asusta es el del movimiento con el stylus... el del mov. con el pad no me asusta demasiado... aunque como hay que ir en orden... voy a hacer el del stylus primero... >.< ... que mala pinta tiene el coooodigo.... T_T
Ultima edición por judelco el 10 Dic 2007 17:32, editado 1 vez

Markuf
Avatar de usuario
Not giving a f**k!
 
Mensajes: 5357
Registrado: 25 Jul 2005

Mensajepor Markuf 10 Dic 2007 17:32

Ostias!! Es la primera vez que veo estos tutos! Estan geniales, les hecharé un vistazo, muchas gracias por el curro!

judelco
Avatar de usuario
Scarlet Devil
 
Mensajes: 2450
Registrado: 21 Jun 2007
Ubicación: Málaga!!!

Mensajepor judelco 10 Dic 2007 17:49

He empezado a leer y me he encontrado variables como "float", etc..... eso me ha traido recuerdos y para entenderlo mejor he hechado mano a un .txt que hice cuando aprendia C++. Voy a postearlo para que podais hacer uso de el:

------------------------------------------------------------------------------
TXT - EXPLICACIONES EN C++ [JuDelCo]
------------------------------------------------------------------------------
--------------------------*-ESTRUCTURA-*--------------------------------

#include
#include

(Instrucciones de declaramiento de librerias)(Tomos de diccionario)
#include

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

main()
{
cout<<"Este es mi primer programa"< cout<<":)";
getche();
}

(Programa) - main()
{
(Instrucciones)
}

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

#include
#include
main()
{
char nombre[10];
char apellidos[30];
int edad;
float altura;

cout<<"Cual es tu nombre?";
cin>>nombre;
cout<<"Cual es tu edad?";
cin>>edad;
cout<<"Hola"<getche(); variable nombre se mostrará)
}

-----------------------------------------------------------------------
--------------------------*-DEFINICIONES-*-----------------------------

COUT : Sirve para escribir un mensaje en la pantalla. Cuando el
ordenador ejecuta una instruccion cout sabe que en la pantalla debe
escribir una informacion. Por ahora, solo escribira texto, y para
yo indicarle adecuadamente el texto que quiero que escriba debo ponerlo
entre comilas dobles ("). Si le digo q escriba <el ordenador sabe que debe bajar el cursor a la linea siguiente.
Esta instruccion cuando tiene que escribir diferentes cosas, debe
ultilizar para separar unas de otras el simbolo <<
Esta instruccion se encuentra en la libreria iostream.h

GETCHE : Esta instruccion sirve para detener o bloquear la ejecucion del
programa hasta que se pulse una tecla. Nosotros normalmente la ultilizarmos
como ultima instruccion del programa para poder ver resultados. Esta
instruccion se encuentra en la libreria conio.h

CHAR : Es una variable con el nombre "example", que te permite guardar
letras. En los corchetes [x] el simbolo "x" indica el tope de letras que
permite guardar en la memoria principal
ejemplo: -- char example[x] --

INT : Es otra variable que sirve para guardar en la mem.principal un numero,
ojo, no permite guardar cualquier numero, solo permite guardar numeros
enteros (sin decimales). No debe sobrepasar el numero 32.000.

FLOAT : Es otra variable que sirve para guardar en la mem.principal un
numero real, esta vez permite las comas (las comas se ponen como puntos)

LONG : Otra variable, esta vez sirve para guardar un numero pero esta vez
sin la restriccion del numero 32.000

CIN : Sirve para entrar una variable, por ejemplo : cin>>nombre
La variable llamada nombre dará paso a la escritura del usuario para
escribir la variable que permita tales caracteres, Tambien detiene el
programa hasta que el usuario introduzca la informacion que le pida

GETS (x) : Sirve para que te pregunte la variable x y la informacion que
se guarde incluya más de una palabra (para los apellidos, por ejemplo)

**Las variables necesitan ser escritas antes de las instrucciones, ojo!**

OPERADORES ARITMÉTICOS : ( + - * / % ) (suma,resta,multiplicar,dividir,calcula
el resto de la division que se le indique -- 8%2=0 -- )

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

OJO, es de C++, no de PALib... pero como he visto lo de float.. puede que sirva de algo.

PD: Sigo esperando la explicacion de PORQUE no se quieren llevar bien los fondos con las fuentes personalizadas... :(

Bye! [chiu]

adan_gecko
Avatar de usuario
Adicto
 
Mensajes: 289
Registrado: 23 Oct 2005
Ubicación: Málaga, España

Mensajepor adan_gecko 10 Dic 2007 19:16

ImagenImagenImagen

Mi versión mejorada de WINWOWS :lol: basada en el tuto de GUIs de las PA_Lib. Ahí es nada.
Ultima edición por adan_gecko el 10 Dic 2007 19:24, editado 1 vez

PookSD
Avatar de usuario
Habitual
 
Mensajes: 37
Registrado: 25 Abr 2007
Ubicación: Frikilandia

Mensajepor PookSD 10 Dic 2007 20:35

Buen tuto, aunque yo no hubiese puesto de ejemplo hacer "Sistemas operativos", despues la gente verá las screens, se pensará lo que no es, y tendremos a mil tonticos jurando que han visto un windows y un guadalinex para la DS, y siempre habrá un primo de un amigo del conocido de un cuñado que perjurará que es posible instalar windows xp en la ds porque él lo tiene instalado... xD

Salutres y 5 estrellas!

Siguiente

Volver a Scene

¿Quién está conectado?

Usuarios navegando por este foro: No hay usuarios registrados visitando el foro y 0 invitados