0-00 escribió:Esta bien, he leido vuestro post; pero no hay algo que sea como PAlib, pero para la Wii (es decir funciones bastante facilitas de utilizar). Yo ya suponia que se podria programar en C nada mas, pero preferiria algo mas sencillo (como ya he dicho, una libreria estilo PAlib, pero en la wii).
De todas formas gracias por responder e intentare informarme mas (pero no se, parece mas dificil que la programacion de Ds; en la que ya tengo algo de experiencia).
Por cierto Hermes, tu utilidad Spritegen, ¿¿sirve para hacer mapas de colisiones?? y, si es asi; ¿¿sirve para la Ds??
Saludos
Hombre, cada uno hace lo que le da la gana, pero yo no te aconsejaría tirar de librerias como PAlib para programar ¿Por que?
Pues porque utilizan funciones que encapsulan otras funciones que al fin y al cabo, son los pilares básicos y se parecen mucho en todas las maquinas (por ejemplo, GX tiene gran parecido con OpenGL y en DS tienes una librería que es una versión reducida de OpenGL)
Por ejemplo, si echas un vistazo al ejemplo de sprites de mi librería, veras que llama a una serie de funciones para inicializar el video (que tu mismo puedes encapsular en una funcion), luego carga como texturas los diferentes sprites desde el fichero sprite.c (exportado a C desde Spritegen) y puedes ver como se llama a una funcion para crear las tiles necesarias para poder cargar la textura y luego tienes una funcion que encapsula todo lo necesario para dibujar los sprites en pantalla.
Es decir: que lo tienes muy facil para poder usar sprites acelerados, sin tener que comerte el tarro.
Si lo que quieres es escribir "directamente" en pantalla, dibujando pixel a pixel en una "superficie", pues puedes asignar una zona de memoria como textura (alineada a 32 bytes, eso si), dibujar ahi, transformarlo a tiles (tiling4x4), lo subes como textura (GX_InitTexObj/GX_InitTexObjLOD) y dibujas un cuadrado que ocupe toda la pantalla (es todo el mismo sistema que empleo con los sprites y de hecho puedes dibujar un sprite que ocupe toda la pantalla para ello (DrawSprite))
Quizá te parezca dificil, pero es solo cuestión de acostumbrarse y tiene la ventaja de que el encapsulado lo haces tu y eso te puede facilitar portar tu juego a otra maquina diferente (mientras que si tiras de una librería particular, como esa librería no existe en otra maquina, pues te comes un colín).
Luego el tema de leer el PAD, pues no es nada dificil leer el PAD desde la libogc. Y el tema de sonido, mejor y mas facil que Sndlib, no hay
Sobre lo que comentas de
Spritegen para detectar colisiones y tal, dentro de los sprites, el color 0 representa transparencia, luego si miras dentro de un sprite y el color es 0, es un "hueco".
Sobre los mapas, los sprites se pueden organizar en capas y además, se les puede asignar un atributo de grupo.
Por ejemplo, en el mapa del ejemplo, yo tomo el layer 0 como objetos que estan detras de los actores (por lo que no se colisiona) y el layer 3 como objetos que están delante de los actores (tampoco hay colision, pero estos objetos pueden ocultar parcialmente el personaje, como el caso de la barandilla de la escalera)
El Layer 1 lo utilizo para los muros, el suelo y el techo, mientras que Layer 2 serian objetos que nos obstaculizan (por ejemplo, un cofre, un mueble, etc)
¿como se detecta una colision?
Pues muy facil: Imagina que lo que quieres saber, es si hay suelo debajo de los pies del actor. Pues lo que tendrias que hacer, es que si el personaje está situado en un recuadro(el sprite, está en una posicion y tiene un ancho y un alto) pues tendrias que mirar si hay un sprite en layer 1 y en layer 2, que esté justo debajo de los pies del actor.
Obviamente el mapa de sprites señala al sprite en cuestion: te da su posicion en pantalla, su ancho, su alto, el indice de sprite y su atributo de grupo, por lo que a apartir de ahi es muy facil detectar si los recuadros se tocan y si quieres, afinar en la deteccion usando el mismo sprite (que ya sabes que el color 0 representa un hueco, asi que el mismo sprite te sirve como mascara)
El atributo de grupo, lo puedes usar para cosas especiales: por ejemplo, las antorchas tienen un atributo 128, que simplemente es un flag que uso para intercambiar ese sprite con el siguiente y asi animar la llama. Tambien lo uso para fijar la posicion donde salen los enemigos , donde puede haber una llave, etc.
Pero vamos, tienes que tener en cuenta que todo eso lo puedes asignar a tu libre eleccion: el mapeador, lo que hace es posicionar los objetos en un determinado layer y te da la posibilidad de fijarle un atributo. Como lo interpretes, es cosa tuya.