Anuncios Google

Dudas nflib

Buenas, tengo algúnas dudillas del Nflib, estoy estudiando para intentar ser Coder,(me gustaria aprender a programar) y tengo unas dudas:

¿Cómo se borra un Bg o sprite? no lo consigo, pongo, por ejemplo para borrar Bg:

NF_UnloadTiledBg("mifondo");

Esto supuestamente hace que se quite de la Ram el fondo, como si no estuviera cargado(borramos mifondo).

NF_DeleteTiledBg(1,3);

Esto ya elimina el fondo, el fondo está en la pantalla de abajo y en la capa 3, elegida a la hora de cargar el bg.

Ahora, al cargar el homebrew, si pulso el boton que he elegido para borrarlo, me da un error diciendo que ese Bg no está cargado, entonces ¿como se borra? igual que Bg, otra cosa, ¿como muevo un sprite por la pantalla?

 


Consolas: DS, WII, 3DS.

Juegos 3DS: Super mario 3D Land, Mario Kart 7, One Piece Unlimited Cruise SP y Sonic Generations

Eshop: Pullblox, Mario vs Donkey Kong ¡Los minis marchan de nuevo!, Birds Mania 3D, Fun! Fun! Minigolf touch!,  Colors 3D, Kid icarus (GC) Super Mario land 2:6 golden coins(GB), Calculadora Mario, Pyoro, Inchworm Animation y Photo dojo.

Consolas pirateadas: WII, DS.

Consolas en espera para piratearlas: 3DS.


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de Draco el dragon

Con NF_DeleteTiledBg, lo que

Con NF_DeleteTiledBg, lo que haces es eliminar el fondo de la VRAM. Si por ejemplo cargas un fondo en RAM, y luego lo pasas a la VRAM para que se vea, y luego lo eliminas de los dos sitios y tienes un bucle en el que creas un bg, no te lo va a poder crear porque no tiene almacenado ese bg.

Para funciones, mira en los pdf que traen las librerias, que ahi estan todos explicados, a parte de los ejemplos. La funcion es NF_MoveSprite (pantalla, id, x, y).

Imagen de _-jose-_

Quiero que se mueva

No que vaya a otra posición, (se mueva al estilo rpg)

Imagen de Draco el dragon

Eso se hace por logica, no

Eso se hace por logica, no por funciones de libreria. Tienes en los tutoriales de PAlib varios ejemplos de distintos movimientos de sprites, como aceleracion (como la gravedad) y movimientos normales. Si quieres hacerlo "tipo RPG", simplemente seria sumar numeros mediante pulsaciones de teclas a una variable donde almacenes la posicion, y luego poner la funcion NF_MoveSprite en un bucle que se repita todo el rato para que su posicion se actualice.

Imagen de _-jose-_

Eso

Ni idea de como se hace, es muy lioso, la verdad, si hubieran echo más tutos de nflib, que hacen falta.

Imagen de Draco el dragon

¿Lioso? Si eso te parece

¿Lioso? Si eso te parece lioso... XDD

if (keysHeld() & KEY_RIGHT) personajex+=1; // Si se mantiene pulsada la tecla de la derecha en la cruceta, la posicion x del personaje suma 1

if (keysHeld() & KEY_LEFT) personajex-=1; // Si se mantiene pulsada la tecla de la izquierda en la cruceta, la posicion x del personaje resta 1

if (keysHeld() & KEY_UP) personajey-=1; // Si se mantiene pulsada la tecla de arriba en la cruceta, la posicion y del personaje resta 1

if (keysHeld() & KEY_DOWN) personajey+=1; // Si se mantiene pulsada
la tecla de abajo en la cruceta, la posicion y del personaje suma 1

Eso lo pones en un bucle que se repita en determinadas circunstancias para que se analice todo el rato si lo pulsas o si no.

Despues seria actualizar todo el rato la posicion del sprite con la funcion NF_MoveSprite y ya esta.

En serio, si eso te parece dificil, vete un poco mas despacio.

Imagen de _-jose-_

Hay algun tuto de C?

Que explique este tipo de cosas XD que no las entiendo, se poner controles, pero tendría que entender las funciones para hacerlo sin mirar.


Consolas: DS, WII, 3DS.

Juegos 3DS: Super mario 3D Land, Mario Kart 7, One Piece Unlimited Cruise SP y Sonic Generations

Eshop: Pullblox, Mario vs Donkey Kong ¡Los minis marchan de nuevo!, Birds Mania 3D, Fun! Fun! Minigolf touch!,  Colors 3D, Kid icarus (GC) Super Mario land 2:6 golden coins(GB), Calculadora Mario, Pyoro, Inchworm Animation y Photo dojo.

Consolas pirateadas: WII, DS.

Consolas en espera para piratearlas: 3DS.

Imagen de Draco el dragon

Los tutoriales que hay aqui

Los tutoriales que hay aqui de PAlib y los de la wiki de PAlib explican bastante sobre como hacer determinados movimientos de sprites. Seguramente haya algun otro, pero ahora mismo no recuerdo.

Pero te repito que esto no son funciones de poner una frase y luego los argumentos. Simplemente piensa que es lo que tienes en mente e intenta pasarlo a codigo, y luego lo perfeccionas. Claro esta, es obligatorio el conocer los distintos tipos de operaciones que puedes realizar, como se utilizan los signos de mayor que, etc.

Por ejemplo, imaginate el movimiento de Mario en el Super Mario Bros. Consiste en que Mario queda en el medio de la pantalla y se puede mover con el fondo quieto si esta en una posicion que se encuentre desde el centro de la pantalla hasta el extremo izquierdo de la misma. Luego si pasas del medio de la pantalla y sigues yendo hacia la derecha, el fondo se mueve y Mario queda quieto. No tiene mucha mas complicacion (claro esta, hablando en general olvidando por completo las colisiones de los objetos, etc.).

Imagen de _-jose-_

Pff.

La verdad es que lo he comprendido, primero se declara las variables x,y

u32 x = 0;

u32 y = 0;

y luego usamos la función del teclado y por ejemplo, mover el sprite a la izquierda es = x -=1, luego se usa la función MoveSprite para actualizar el movimiento!

Pero no consigo borrar en bg.


Consolas: DS, WII, 3DS.

Juegos 3DS: Super mario 3D Land, Mario Kart 7, One Piece Unlimited Cruise SP y Sonic Generations

Eshop: Pullblox, Mario vs Donkey Kong ¡Los minis marchan de nuevo!, Birds Mania 3D, Fun! Fun! Minigolf touch!,  Colors 3D, Kid icarus (GC) Super Mario land 2:6 golden coins(GB), Calculadora Mario, Pyoro, Inchworm Animation y Photo dojo.

Consolas pirateadas: WII, DS.

Consolas en espera para piratearlas: 3DS.

Imagen de Dioni0396

O.O

porque gastar tanta memoria puediendo usar u16?

Imagen de _-jose-_

Ah, ok

Porcierto, una vez quise un poco probar las Pa_Lib, y la verdad es que en internet hay tutos muy bien explicados que te sacan muchas dudas, sin embargo en nflib no consigo NADA decente debido a falta de tutos, que yo consegui con palib hacer cosas que no consigo en nflib(como mover sprites con el lapiz o animar sprites con varios frames) pero seguiré con nflib por que es más decente.


Consolas: DS, WII, 3DS.

Juegos 3DS: Super mario 3D Land, Mario Kart 7, One Piece Unlimited Cruise SP y Sonic Generations

Eshop: Pullblox, Mario vs Donkey Kong ¡Los minis marchan de nuevo!, Birds Mania 3D, Fun! Fun! Minigolf touch!,  Colors 3D, Kid icarus (GC) Super Mario land 2:6 golden coins(GB), Calculadora Mario, Pyoro, Inchworm Animation y Photo dojo.

Consolas pirateadas: WII, DS.

Consolas en espera para piratearlas: 3DS.

Imagen de Dioni0396

Hum....

No creo que sea tan dificil ponme un ejemplo en palib, ya que no me acuerdo bien de C.

Imagen de Draco el dragon

Pero es que eso no son cosas

Pero es que eso no son cosas de "librerias", es algo que todo coder deberia saber hacer, sea con la libreria que sea. Simplemente PAlib ya hace todo eso con una misma funcion y tu solo pones los argumentos, pero hacerlo uno mismo da como resultado: entender mejor el codigo (ya que lo haces tu), poder modificarlo a tu gusto, etc. etc. etc.

Lo de que tenga mas tutoriales, si te fijas, solo explican cosas que ya vienen en los numerosos ejemplos que traen las PAlib, o lo de como mover x cosa, que como dije, sirve para cualquier libreria que se precie, pero SOLO cuando lo entiendes.

Creo que ya lo dije varias veces, pero hacer una "funcion" de esas, es solo pensar en lo que hace el objeto y "traducirlo" a codigo, no tiene nada que necesite mil tutoriales ni nada de eso.

Imagen de _-jose-_

Pues mira

En palib, para animar un sprite PA_StartSpriteAnim(0,1,0,2,9); ¿Como seria esa funcion en nflib? o para mover un sprite con el lapiz PA_SetSpriteXY(0,1,Stylus.X-16,Stylus.Y-16); ¿como seria?


Consolas: DS, WII, 3DS.

Juegos 3DS: Super mario 3D Land, Mario Kart 7, One Piece Unlimited Cruise SP y Sonic Generations

Eshop: Pullblox, Mario vs Donkey Kong ¡Los minis marchan de nuevo!, Birds Mania 3D, Fun! Fun! Minigolf touch!,  Colors 3D, Kid icarus (GC) Super Mario land 2:6 golden coins(GB), Calculadora Mario, Pyoro, Inchworm Animation y Photo dojo.

Consolas pirateadas: WII, DS.

Consolas en espera para piratearlas: 3DS.

Imagen de Anabol

Hace tiempo que hice una

Hace tiempo que hice una función para NF_Lib que animase Sprites.

Imagen de _-jose-_

¿Tanto codigo para animar?

No sabia que habia que poner tanto codigo para hacer una animación, si es asi con todo, me paso a las palib, que en palib sólo se usa una linea.


Consolas: DS, WII, 3DS.

Juegos 3DS: Super mario 3D Land, Mario Kart 7, One Piece Unlimited Cruise SP y Sonic Generations

Eshop: Pullblox, Mario vs Donkey Kong ¡Los minis marchan de nuevo!, Birds Mania 3D, Fun! Fun! Minigolf touch!,  Colors 3D, Kid icarus (GC) Super Mario land 2:6 golden coins(GB), Calculadora Mario, Pyoro, Inchworm Animation y Photo dojo.

Consolas pirateadas: WII, DS.

Consolas en espera para piratearlas: 3DS.

Imagen de kNightFox

 Espera espera..

 Espera espera.. Tanto....

void NF_SpriteFrame(u8 screen, u8 id, u16 frame) {
 
	// Verifica el rango de Id's de Sprites
	if ((id < 0) || (id > 127)) {
		NF_Error(106, "Sprite", 127);
	}
 
	// Verifica el rango de frames del Sprite
	if (frame > NF_SPRITEOAM[screen][id].lastframe) {
		NF_Error(106, "Sprite frame", NF_SPRITEOAM[screen][id].lastframe);
	}
 
 
	// Verifica si el frame necesita ser actualizado
	if (NF_SPRITEOAM[screen][id].frame != frame) {
 
		// Si debes de copiar el nuevo frame desde la RAM a la VRAM...
		if (NF_SPR256VRAM[screen][NF_SPRITEOAM[screen][id].gfxid].keepframes) {
 
			// Variables temporales
			char* source;			// Puntero de origen
			u32 destination = 0;	// Puntero de destino
			u16 ramid = 0;			// Slot de RAM donde se encuentra el Gfx
 
			// Calcula el origen y destino del nuevo frame a copiar
			ramid =  NF_SPR256VRAM[screen][NF_SPRITEOAM[screen][id].gfxid].ramid;
			source = NF_BUFFER_SPR256GFX[ramid] + (NF_SPRITEOAM[screen][id].framesize * frame);
			destination = NF_SPR256VRAM[screen][NF_SPRITEOAM[screen][id].gfxid].address;
 
			// Copialo
			NF_DmaMemCopy((void*)destination, source, NF_SPRITEOAM[screen][id].framesize);
 
		} else {	// Si todos los frames ya estan en VRAM...
 
			// Calcula la direccion del Gfx del frame
			u32 address = 0;
			address = NF_SPR256VRAM[screen][NF_SPRITEOAM[screen][id].gfxid].address + (NF_SPRITEOAM[screen][id].framesize * frame);
			NF_SPRITEOAM[screen][id].gfx = (u32*)address;
 
		}
 
		// Almacena el frame actual
		NF_SPRITEOAM[screen][id].frame = frame;
 
	}
 
}

Y eso es solo para cambiar de frame en libnds... Muy mal acostumbrados estais, que se confunde el programar con copiar/pegar funcionas que lo hacen todo por ti...


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.

 

Imagen de Anabol

Ahí está el concepto de

Ahí está el concepto de librería, en tener que escribir lo menos posible :P

Imagen de _-jose-_

Eso es cambiar de frame en libnds?

Pues eso lo veo en chino XD

Copiar y pegar? yo algo cuando consigo algo lo practico varias veces asta sabermelo bien.

Imagen de Andresmargar

NO hace falta...

No hace falta que entiendas la funcion, eso se pone en una cabecera .h, lo añades al .c, y usas la funcion como otra mas(como #include <stdio.h>)poniendo los argumentos y eso(eso es basico de c)

 

Hay muchas otras funciones de otras cosas que no salen el muchas LIB, y seria bueno acostumbrarse a C porque es lo primero que se debe de saber para hacer un jueguecito(en mis tutos de taringa encontre a uno que quiere que le ayude a un juego que quiere hacer y me paso el code, y...

 

que es lo que vi??

 

el mismo codigo de los sprites del tutorial, pegado a lo violento al main.c de la template de las NF_LIB)

 

Con esto consigo que se sepa que programar no es una teoria, es casi todo prectica, e ingeniarselas con C a hacer lo que quieras, un juego, un App etc.


~Actualmente estudiando Ingeniería de las Tecnologías de la Telecomunicación en la Escuela de Ingenieros~

Imagen de adriel0000

Seria

Seria si:

Tu Sprite tiene unas posiciones asignadas (Las que tu le pongas) Y esas posiciones despues las declaras en variables. Una vez teniendo las variables (Con la posicion de tu sprite) solo tienes que hacer que al pulsar la tecla arriva por ejemplo la variable X (Que seria arriva) Aumente su valor. Asi las posiciones del sprite varian segun pulse la tecla. Despues son las animaciones.


Mi blog: adriel0000.wordpress.com

 

un saludo.

Imagen de Dioni0396

Eso es logica de programacion

Eso es logica de programacion, el que aumente en 1 cada vez que pulse un boton no necesita ni tutos.

Imagen de _-jose-_

Pues no tengo

Ni idea de esto xD. Y sé lo basico de C.

Imagen de adriel0000

Se refiere a que aumente una variable.

Se refiere a que aumente una variable asignada al sprite. Eso es basico de C esta en el segundo tuto de C de scenebeta Hay te enseñan todo sobre variables.


Mi blog: adriel0000.wordpress.com

 

un saludo.

Imagen de _-jose-_

Eso me lo leí

Y lo entiendo sin problemas, pero no explica estas cosas.

Imagen de adriel0000

Hola,

Hola,

Primero yo nunca use NFlib asi que no se si esto te funcionara.

1º- Para borrar el fondo ten encuenta que el NF_UnloadTiledBg el nombre de dentro Como se llama el archivo exactamente igual.

2º- Otra cosa es de logica. Si tu pones antes de borrar el fondo que lo elimine de la ram, pues seguro que te dira que no existe, lo que pasa esque el fondo ya se coloco pero a la ora de borrarlo lo quitaste de la RAM. prueba poner antes la NF_DeleteTiledBg y despues la otra.

3º- Para mover un sprite no tengo ni idea pero puedes mirarte los ejemplos que trae NFlib.


Mi blog: adriel0000.wordpress.com

 

un saludo.

Imagen de _-jose-_

Pues me sigue saliendo error

Me sale:

Tiled Bg Fondo

Not found

error code 104

Dice que no está disponible ese fondo, y el fondo se llama así, este es el code:

#include <stdio.h>
#include <nds.h>
#include <nf_lib.h>
#include <nf_2d.h>
int main(void) {
	NF_SetRootFolder("NITROFS");
	NF_Set2D(0, 0);
	NF_Set2D(1, 0);
	NF_InitTiledBgBuffers();
	NF_InitTiledBgSys(1);
	NF_InitTiledBgSys(0);
	NF_InitSpriteBuffers();
	NF_InitSpriteSys(0);
	NF_InitSpriteSys(1);
	NF_LoadTiledBg("Bg/test", "fondo", 256, 256);
	NF_LoadTiledBg("Bg/TestDS", "fondo1", 256, 256);
	NF_LoadTiledBg("Bg/mario", "mario", 256, 256);
	NF_CreateTiledBg(1, 3, "fondo");
	NF_CreateTiledBg(0, 3, "fondo1");
	NF_LoadSpriteGfx("spr/start", 0, 64, 32);
	NF_LoadSpriteGfx("spr/quit", 1, 16, 32);
	NF_LoadSpritePal("spr/start", 0);
	NF_LoadSpritePal("spr/quit", 1);
	NF_VramSpriteGfx(1, 0, 0, false);
	NF_VramSpriteGfx(1, 1, 1, false);
	NF_VramSpritePal(1, 0, 0);
	NF_VramSpritePal(1, 1, 1);
 
	NF_CreateSprite(1, 0, 0, 0, 150, 150);
	// Bucle (repite para siempre)
	while(1) {
	if(keysHeld() & KEY_START){
	NF_DeleteTiledBg(1, 3);
	NF_UnloadTiledBg("fondo");
	NF_CreateTiledBg(1, 3, "mario");
    NF_ShowSprite(1, 0, false);
	NF_CreateSprite(1, 1, 1, 1, 0, 128);
	}
	if(keysHeld() & KEY_B){
	NF_ShowSprite(1, 0, true);
	NF_DeleteTiledBg(1, 3);
	NF_UnloadTiledBg("mario");
	NF_CreateTiledBg(1, 3, "fondo");
	NF_ShowSprite(1, 1, false);
	}
	if(keysHeld() & KEY_LEFT){
	NF_HflipSprite(1, 1, true);
	}
	if(keysHeld() & KEY_RIGHT){
	NF_HflipSprite(1, 1, false);
	}
	scanKeys();      
        NF_SpriteOamSet(0);
		NF_SpriteOamSet(1);
		swiWaitForVBlank();		// Espera al sincronismo vertical
        oamUpdate(&oamMain);
		oamUpdate(&oamSub);
	}
 
	return 0;
 
}


Consolas: DS, WII, 3DS.

Juegos 3DS: Super mario 3D Land, Mario Kart 7, One Piece Unlimited Cruise SP y Sonic Generations

Eshop: Pullblox, Mario vs Donkey Kong ¡Los minis marchan de nuevo!, Birds Mania 3D, Fun! Fun! Minigolf touch!,  Colors 3D, Kid icarus (GC) Super Mario land 2:6 golden coins(GB), Calculadora Mario, Pyoro, Inchworm Animation y Photo dojo.

Consolas pirateadas: WII, DS.

Consolas en espera para piratearlas: 3DS.

Imagen de Draco el dragon

El error que tienes es que

El error que tienes es que pusiste Held, que en ingles significa mantener. Vamos, que lo que pongas dentro del if ocurrira en cada vuelta mientras tengas presionado el boton, y el error te dice que no puede eliminar el fondo (por ejemplo, en el boton Start el bg "fondo") porque antes lo eliminaste y no lo tienes cargado. A menos que hagas variables para verificar en que opcion te encuentras o cambies Held por Down (que hace que solo se haga lo de dentro del if en el momento de pulsar la tecla, no mas veces), seguiras teniendo ese error.

Imagen de Andresmargar

Ese es el fallo, pero, cambiaria...

Pero no pongas a incluir el nf_2d.h, ya que el archivo que incluyes de nf_lib.h a incluye los demas, si no miralo, que solo pone 20 includes, y no tienes que ponerlos a cada funcion que hagas

 

Otra cosa seria organizar el proyecto, no se, se me irritan los ojos al ver TANTO code puesto ahi, mejor usa funciones(con muchos archivos etc.), o algun define yo que se xD

 

Recuerda que si borras algo de RAM, luego no puedes volver a cargarlo, quitalo SOLO de VRAM, y cuando no se necesite, de RAM

 

En el menu que tienes hecho, para volver a un paso dado anteriormente, se usa un if(if(keysDOwn() & KEY_A) Sale del menu y entra al juego9, y para volver un else if(else if(keysDown() &KEY_B) carga el fondo del menu, borra de VRAM y vuelve)

 

O si no quieres hacer lo del ultimo parrafo, haz algo que resetee el sistema(lo que hago para volver, vamos xd)

 

Y el main, me pregunto por que se pone int main(void)??

Yo pongo int main(int argc, char** argv), pero no se que diferencia hay :S

 

Bueno, eso era, suerte con el proyecto xd


~Actualmente estudiando Ingeniería de las Tecnologías de la Telecomunicación en la Escuela de Ingenieros~

Imagen de _-jose-_

ya me va todo perfecto

Gracias.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.