manny2008 escribió:¿Alguien tiene experiencia con SDL? Es factible que sea fácil compilarlo para Wii y para Ubuntu, o para Wii y para Windows con solo modificar un parámetro en el MAKE?
Gracias,
Manny
civ escribió:como se pueden hacer cosas con estas cosas (me refiero a como programar con el SDL y todo eso)
es que me gustaria haer un juegecillo sencillito pero no tengo ni idea de programacion
kriogeN escribió:El SDL para Wii solo reconoce el puntero (como ratón) y los botones A y B (como boton izquierdo y derecho del ratón). Pero es muy facilmente modificable para implementar el resto de botones.
Yo lo tengo hecho, pero hacia botones ficticios del ratón que no están en la librería SDL. Lo que tendrias que hacer es modificarla para que simule teclas del teclado (SDLK_UP, SDLK_DOWN, etc) y entonces te compilaria en cualquier sistema que utilize SDL.
EDIT: Acabo de ver que quieres usar un control un poco especial para controlar la nave, en ese caso lo mejor es que utilizes SDL solo para la parte grafica, y para la parte del control uses la Wiiuse de forma normal, luego en el codigo pones algun #ifdef WII para ese control y otro para el control normal de SDL.
Petete_torete escribió:A ver si para mañana te tengo preparado un icono.
InitScreen(); // Inicialización del Vídeo.
........ // inicializacion de las tablas, el mod, etc
while(1) //bucle principal
{
// dibuja la caja
DrawRoundFillBox(SCR_WIDTH/2-200, 16, 400, 80, 0, 0xffafafaf);
// dibuja el borde de la caja
DrawRoundBox(SCR_WIDTH/2-200, 16, 400, 80, 0, 4, 0xff00ffff);
letter_size(16,64); // tamaño de letra 16x64
PX= 0; PY= 24; color= 0xff000000; bkcolor=0; // ajusta coordenadas y colores
autocenter=1; // modo de letra con centrado horizontal
s_printf("Esto es un test");
autocenter=0;
ConfigureForColor(); // configura para usar GX_Begin con color en vertices
GX_Begin(GX_LINES, GX_VTXFMT0, 80*2); // vamos a dibujar 80 lineas x 2 vertices
// dibuja 80 lineas utilizando una tabla de alturas
for(n=0;n<80;n++)
{
AddColorVertex(n*8, tabla[n], 1, 0xffff9000); // primer vertice (recuerda que x, y y z son enteros con signo de 16 bits)
AddColorVertex((n+1)*8,tabla[n+1], 1, 0xffff9000); // segundo vertice
}
/* NOTA: AddColorVertex es una funcion inline que niega la Z para que los valores Z de mayor peso, permanezcan detras y los negativos sean invisibles. Tambien se ocupa de invertir el color para que Alpha sea el byte de mayor peso y Rojo el byte de menor peso */
GX_End(); // realmente, es una funcion decorativa :p
...... // actualiza la tabla
Screen_flip(); // espera a que se dibuje todo, al retrazado vertical e intercambia el buffer de pantalla
}
Hermes escribió:manny2008 escribió:Hermes escribió:
Ademas, teneis otras funciones de dibujo para lineas, cajas, cajas redondeadas, elipses con o sin relleno. Dibujado de caracteres en pantalla con tamaño redimensionable (usa una fuente interna de 16x32 pixeles). Y hay mas funciones para el sonido, etc.
Hola Hermes, perdona que te moleste, estoy haciendo un juego con gráficos vectoriales (o poligonales.. según se vea), he probado con GRRLIB, y no me esta gustando mucho.. por lo que ve, aunque la última versión utiliza GX, lo hace todo en su propio frambuffer y solo utiliza GX al final.. si uso tu librería (screen.c) usando DrawLine me ira mas rápido?
Gracias,
Manny
No conozco cual es el problema que tienes con GRRLIB, luego no se si irá mas rapido. Mi librería tiene un problema porque plantea el dibujo de lineas desde un punto de vista de poder cambiar el grueso, asi que en realidad dibujo dos triangulos para formar una linea gruesa y tambien introduzco en cada llamada la informacion del formato de vertices, conectar con textura, etc. Es decir, que no está optimizado para dibujar tus graficos vectoriales, porque el objetivo no es mostrar miles de lineas rapidamente.
Peeero, no hay nada que impida dibujar lineas como tu dices, pasandole un buffer conteniendo una lista de coordenadas y un color y dibujarlo asi o a buenas malas, usar las funciones GX a pelo:
Activa transparencia/translucidez usando esto:GX_SetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA,GX_BL_INVSRCALPHA, GX_LO_CLEAR);
// activa la transparencia de texturas: los colores con alpha<8 no se dibujan
GX_SetAlphaCompare(GX_GEQUAL, 8, GX_AOP_AND, GX_ALWAYS, 0); // esto deja pasar solo valores entre 8 y 255
Con esto configuras para usar color directo, sin texturaGX_SetNumTevStages(1);
GX_SetTevOrder(GX_TEVSTAGE0, GX_TEXCOORDNULL, GX_TEXMAP_NULL, GX_COLOR0A0);
GX_SetTevOp(GX_TEVSTAGE0, GX_PASSCLR);
GX_SetVtxDesc(GX_VA_TEX0, GX_NONE);
Con esto configuras los parametros de los vertices, para pasar color directo de 32 bits y las coordenadas como enteros de 16 bits (para dibujar en un area de 640x480 mas que suficiente)GX_ClearVtxDesc(); // borra los descriptores
GX_SetVtxDesc(GX_VA_POS, GX_DIRECT); // selecciona Posicion como directo
GX_SetVtxDesc(GX_VA_CLR0, GX_DIRECT); // selecciona Color como directo
GX_SetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ,GX_S16, 0); // formato de posicion S16 para X, Y ,Z
GX_SetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0); // color RGBA8 para color0
Con esto dibujarias una o mas lineasGX_Begin(GX_LINES, GX_VTXFMT0, 2); // el 2 es el numero de vertices
GX_Position3s16(x1, y1, z1); // primer vertice (recuerda que x1,y1 y z1 son enteros con signo de 16 bits)
GX_Color1u32(color);
GX_Position3s16(x2, y2, z2); // segundo vertice
GX_Color1u32(color);
GX_End();
El ejemplo dibujaria una linea, pero si añades dos vertices mas y pones en GX_Begin 4, serian dos lineas y asi hasta un limite de 65535 vertices "ma o meno" (weno, si te lo soporta el FIFO )
Otra cosa, el color se especifica como RGBA a 32 bits (o sea 8 bits por componente), siendo R el de mayor peso y Alpha el de menor peso.
Inconvenientes que te puedes encontrar: si usas mi libreria, con eso, ninguno, porque está preparada para que tu hagas esos cambios desde fuera. Pero desde GRRLIB seguramente desconfigures algo y pete, porque de por supuesto que las GX estan configuradas a su gusto, cuando no es así.
Ventajas de hacerlo asi: Despues de configurar, es mas rapido porque te evitas usar una lista que luego hay que interpretar para hacer lo que te he pegado ahi (obviamente, el dibujado de lineas es lo que hay entre GX_Begin-GX_End y el resto solo lo haces una vez para configurar antes de empezar a dibujar lineas y el numero de vertices hay que conocerlo antes de empezar a enviarlos)
Hermes escribió:Hola.
Me gustaria que le echaras un vistazo a este programa de demostración:
http://mods.elotrolado.net/~hermes/wii/example1.rar
Está hecho con la librería que comenté, solo que le he añadido unas cuantas cosas para conectar con las GX de forma sencilla.
Como explicacion rapida, te comento que es una demo con un generador de "montañas" basado en numeros aleatorios el cual va añadiendo un nuevo elemento a cada frame, para hacer un scroll horizontal de derecha a izquierda, en pasos de 8 pixeles.
Puesto que la pantalla ocupa un ancho de 640 pixeles, para rellenar toda la pantalla se necesitan 80 lineas.
Los primeros 10 segundos (mas o menos), veras que la generación se produce dibujando esas 80 lineas.
Los diez siguientes, veras que se utilizan 320 lineas en forma de matriz de 2x2 para dibujar un trazo mas remarcado.
Y los ultimos 10, se utilizan QUADS, para dibujar montañas rellenas. En esta caso, me aprovecho del gouraud y de una tabla que almacena distintas intensidades de color, para crear un efecto de atenuación a medida que la altura sube.
Como puedes ver, todo se mueve suavecito y eso que le he añadido un MOD de mi amigo Estrayk, para que amenice un poco
Por si te interesa, te pego aquí el código grafico que interviene, para dibujar lineas (mas o menos ):InitScreen(); // Inicialización del Vídeo.
........ // inicializacion de las tablas, el mod, etc
while(1) //bucle principal
{
// dibuja la caja
DrawRoundFillBox(SCR_WIDTH/2-200, 16, 400, 80, 0, 0xffafafaf);
// dibuja el borde de la caja
DrawRoundBox(SCR_WIDTH/2-200, 16, 400, 80, 0, 4, 0xff00ffff);
letter_size(16,64); // tamaño de letra 16x64
PX= 0; PY= 24; color= 0xff000000; bkcolor=0; // ajusta coordenadas y colores
autocenter=1; // modo de letra con centrado horizontal
s_printf("Esto es un test");
autocenter=0;
ConfigureForColor(); // configura para usar GX_Begin con color en vertices
GX_Begin(GX_LINES, GX_VTXFMT0, 80*2); // vamos a dibujar 80 lineas x 2 vertices
// dibuja 80 lineas utilizando una tabla de alturas
for(n=0;n<80;n++)
{
AddColorVertex(n*8, tabla[n], 1, 0xffff9000); // primer vertice (recuerda que x, y y z son enteros con signo de 16 bits)
AddColorVertex((n+1)*8,tabla[n+1], 1, 0xffff9000); // segundo vertice
}
/* NOTA: AddColorVertex es una funcion inline que niega la Z para que los valores Z de mayor peso, permanezcan detras y los negativos sean invisibles. Tambien se ocupa de invertir el color para que Alpha sea el byte de mayor peso y Rojo el byte de menor peso */
GX_End(); // realmente, es una funcion decorativa :p
...... // actualiza la tabla
Screen_flip(); // espera a que se dibuje todo, al retrazado vertical e intercambia el buffer de pantalla
}
edd2s escribió:Probado y funciona perfectamente... yo jugaba este juego creo que en el atary 2600 y me encantaba estaré al pendiente de este juego.
Pd: estaría bien que se pudiera elevar también picándole A o B pero tal como esta ahora funciona perfectamente
Muchas Gracias!!!