Hola!
Mas mini ejemplos de efectos utiles hechos con mi libreria ^^
El efecto de hoy: El reflejo en el agua.
Aqui teneis el codigo fuente:
/* ------------------------------------------------- NightFox's Lib Template Ejemplo de reflejo del agua (con scroll) Requiere DevkitARM R26 Requiere NightFox's Lib Requiere EFS Lib Codigo por NightFox http://blogs.gamefilia.com/knightfox Inicio 10 de Octubre del 2009 (c)2009 NightFox & Co. ------------------------------------------------- */ /* ------------------------------------------------- Includes ------------------------------------------------- */ // Includes c/c++ #include <stdio.h> // Includes propietarios NDS #include <nds.h> // Includes librerias propias #include <nf_lib.h> // Defines especiales del ejemplo #define VLINE *(vu16*)0x04000006 // Obtiene via registro la linea actual del dibujado // Variables del efecto wave u16 mapa[32][24]; // Almacena el mapa s16 bgx[192]; // Posicion X de cada linea s8 i[192]; // Control de movimiento de cada linea // Variables para el control de fondo s16 bg_x[4]; // Define la funcion a ejecutar para el HBLANK void _WaveEffect(void); /* ------------------------------------------------- Main() - Bloque general del programa ------------------------------------------------- */ int main(void) { // Pantalla de espera inicializando la EFS NF_Set2D(0, 0); NF_Set2D(1, 0); consoleDemoInit(); iprintf("\n EFS init. Please wait.\n This can take up to 5 minutes.\n\n"); iprintf(" Iniciando EFS,\n por favor, espere.\n Puede tardar hasta 5 minutos.\n"); swiWaitForVBlank(); // Define el ROOT e inicializa el sistema de archivos NF_SetRootFolder("EFS"); // Define la carpeta ROOT para usar EFS // Inicializa el motor 2D NF_Set2D(0, 0); // Modo 2D_0 en ambas pantallas NF_Set2D(1, 0); // Inicializa los fondos tileados NF_InitTiledBgBuffers(); // Inicializa los buffers para almacenar fondos NF_InitTiledBgSys(0); // Inicializa los fondos Tileados para la pantalla superior NF_InitTiledBgSys(1); // Iniciliaza los fondos Tileados para la pantalla inferior // Carga los archivos de fondo desde la FAT/EFS a la RAM NF_LoadTiledBg("bg/layer0", "layer0", 512, 256); // Carga el fondo para la pantalla inferior NF_LoadTiledBg("bg/layer1", "layer1", 512, 256); // Carga el fondo para la pantalla inferior NF_LoadTiledBg("bg/layer2", "layer2", 512, 256); // Carga el fondo para la pantalla inferior NF_LoadTiledBg("bg/layer3", "layer3", 512, 256); // Carga el fondo para la pantalla inferior NF_LoadTiledBg("bg/nfl", "nfl", 256, 256); // Carga el fondo para la pantalla inferior // Crea los fondos de la pantalla superior NF_CreateTiledBg(0, 3, "layer3"); NF_CreateTiledBg(0, 2, "layer2"); NF_CreateTiledBg(0, 1, "layer1"); NF_CreateTiledBg(0, 0, "layer0"); // Crea los fondos de la pantalla inferior NF_CreateTiledBg(1, 3, "nfl"); // Inicializa el efecto wave s16 y = 0; s8 inc = 1; for (y = 138; y < 192; y ++) { // Calculos para la capa 1 if ((y >= 138) && (y <= 159)) { bgx[y] = 32; inc *= -1; i[y] = inc; } // Calculos para la capa 0 if ((y >= 160) && (y <= 191)) { bgx[y] = ((y - 156) >> 1); i[y] = inc; inc *= -1; } } // Y definimos que funcion se ejecutara al final de cada linea de dibujado (HBLANK) irqSet(IRQ_HBLANK, _WaveEffect); // Para finalizar, habilitamos la interrupcion irqEnable(IRQ_HBLANK); // Lectura del keypad u16 keys = 0; // Bucle (repite para siempre) while(1) { // Lee el keypad scanKeys(); keys = keysHeld(); // Mueve el fondo if ((keys & KEY_LEFT) && (bg_x[0] > 8)) bg_x[0] --; if ((keys & KEY_RIGHT) && (bg_x[0] < 247)) bg_x[0] ++; // Calcula el parallax bg_x[1] = (int)(bg_x[0] / 1.5); bg_x[2] = (int)(bg_x[1] / 1.5); bg_x[3] = (int)(bg_x[2] / 1.5); swiWaitForVBlank(); // Espera al sincronismo vertical // Posiciona cada fondo donde le corresponde NF_ScrollBg(0, 3, bg_x[3], 0); NF_ScrollBg(0, 2, bg_x[2], 0); NF_ScrollBg(0, 1, bg_x[1], 0); NF_ScrollBg(0, 0, bg_x[0], 0); } return 0; } void _WaveEffect(void) { if ((VLINE >= 138) && (VLINE <= 159)) { // Si la linea esta entre la 138 - 159, ejecuta el efecto para la capa 1 bgx[VLINE] += i[VLINE]; if ((bgx[VLINE] < 1) || (bgx[VLINE] > 63)) i[VLINE] *= -1; NF_ScrollBg(0, 1, bg_x[1] + ((bgx[VLINE] >> 3) - 4), 0); } if ((VLINE >= 160) && (VLINE <= 191)) { // Si la linea esta entre la 160 - 191, ejecuta el efecto para la capa 0 bgx[VLINE] += i[VLINE]; if ((bgx[VLINE] < 1) || (bgx[VLINE] > (VLINE - 156))) i[VLINE] *= -1; NF_ScrollBg(0, 0, (bg_x[0] + (((VLINE - 156) >> 1) - bgx[VLINE])), 0); } }
Aqui podeis ver el video: http://www.youtube.com/watch?v=x3Pk3ATMqiA (el cual se ve de pena)
Y la rom compilada: http://www.mediafire.com/?numlyjzznzk
Y eso es todo por hoy, buen fin de semana a todos!
NightFox
Nuestra web oficial:
http://www.nightfoxandco.com/
Siguenos en facebook:
http://www.facebook.com/pages/NightFox-Co/284338634917917
Por favor, no useis los MP para preguntas, usar el FORO:
http://www.nightfoxandco.com/forum/
Asi nos ahorramos de contestar lo mismo 20 veces.
muy bonito ejemplo
muy bonito ejemplo KnightFox, jeje, me acuerdo que hice un reflejo de espejo con una especie de efecto agua con el asm del 80x86, pero solo tenia ejemplos de modo texto. (era un efecto estático, no te vayas a creer...) Muy bueno, sigue así.
Gracias!
Visita mi blog. Zenit + 5 will win
Como mola...
como mola... ...ojalá se pudierá hacer eso con PAlib y yo supiera...
Es que yo uso PAlib, ya que tengo un problem con NFlib, pero lo areglaré para poder probar las librerias, pero lo que me costará arreglar el problem, me pasó lo mismo que con PAlib, instalo mal las lñibrerias, con PAlib me pasó lo mismo, pero al final lo conseguí, espepro conseguír instalarme bien las NFlib...
I like:
Se puede hacer
Se puede hacer tranquilamente con PALIB, solo tienes que adaptar el codigo.
si, pero
el problema es que aun no he conseguido instalarme las NFlib correctamente, ya que aun no me compila bien, es que estoy interesado en probar las NFlib, pero no consigo instalarmelas correctamente...
I like:
Es que no se
Es que no se instalan.
Simplemente pillas la carpeta template para crear un proyecto nuevo y le das a COMPILE