Anuncios Google

Otra vez sobre los dichosos Sprites.

Hola de nuevo:

 

Me presento. Soy Juan Carlos y estoy intentando aprender a programar. En mis dos temas del foro, he intentado aprender (y algo he conseguido enterarme) sobre los Sprites.

 

He intentado entender sobre todo el funcionamiento y como se asignan los sprites, pero por más que lo intento no consigo enterarme del funcionamiento correcto

Parto del ejemplo de NFLIB en la carpeta Examples/Sprites.

 

Por más que he intentado bajar una simple bola a la pantalla de abajo (el ejemplo mueve un personaje en la pantalla de abajo y un monton de bolas en la superior), todo lo que he conseguido son errores de GFX 0 no está cargado. o ya está cargado (el GFX...... errores 106,110 o 111), y digo yo que no será tan dificil de realizar. Pues llevo días intentándolo todo, cambiar el número de la pantalla, cargar dos veces el archivo bolas para dar sendas variables (una en cada pantalla y con mismo número para no equivocarme ......)

La función NF_LoadSpriteGFX(a,b,c,d) carga el sprite a con número b.

 

Pero si al pasarlo a VRAM (NF_VramSpriteGFX(a,b,c,d) lo carga en pantalla A )le doy en la pantalla 1, no he sido capaz de que salga en la 0. NI SIQUIERA PONIENDO PANTALLA 0 en la función, en este caso da error.

Cuantos "Dibujos" se entienden por sprite. Cuanto carga un slot. Que capacidad tienen ambos. Por más que he intentado buscar esta información, no la encuentro. ¿ AYUDA ??.

Alguien puede ayudarme a entender la capacidad real de los sprites y su funcionamiento ???

 

Os lo agradezco enormemente, ya que antes de continuar profundizando debo entender ÉSTO. 

Juan Carlos


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 Andresmargar

Sprites

Recuerda que los Sprites solo pueden tener unos tamaños determinados, debes convertir tu grafico con el bat del Grit <Convert_Sprites>, te dira que metas el nombre de la paleta, luego usa las funciones para cargar fuera de un bucle, luego para moverlo usa NF_MoveSprite(); No te olvides de las actualizaciones de Sprites:

 

NF_SpriteOamSet(pantalla);
oamUpdate(&oamMain);
oamUpdate(&oamSub);

 

Es necesario eso para que un Spritre se muestre en pantalla y moverlo


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

sprites

Gracias por contestar.

Mi problema reside en que si cargas un sprite en la pantalla 1, no se puede cargar y visualizar wen la pantalla 0. En el ejemplo de la libreria se ven dos tipos de sprites. pero no se intercambian, y yo he intentado hacerlo ( suposicion mia, cambiando solo en la orden de carga el numero de la pantalla, pero no sale).

 

Otra pregunta es que pone que la ds puede usar 256sprites. Pero son 256 sets de (por ejemplo 6 imagenes cada uno) o 256 imagenes solamente ?

 

Gracias de antemano.

juan carlos

Imagen de kNightFox

Vamos por partes. El hardware

Vamos por partes. El hardware de la DS puede manejar como maximo 128 sprites de entre 8x8 y 64x64 pixeles por pantalla o un maximo de 1024 tiles de 8x8 pixeles, lo que se acabe antes.
No es tan dificil manejar sprites:

Cargas el grafico desde NitroFS a RAM (RAM slot de graficos 0 por ejemplo)
Cargas la paleta desde NitroFS a RAM (RAM slot de paletas 0 por ejemplo)
Transfieres el grafico a la VRAM de la pantalla 0 (del RAM slot de graficos 0 al VRAM slot 0 por ejemplo)
Transfieres el grafico a la VRAM de la pantalla 1 (del RAM slot de graficos 0 al VRAM slot 0 por ejemplo, dado que cada pantalla tiene sus 128 slots).
Transfieres la paleta del RAM slot de paletas al PALETTE slot de la pantalla 0
Transfieres la paleta del RAM slot de paletas al PALETTE slot de la pantalla 1
Creas el sprite de la pantalla 0 usando el slot de graficos 0 y el slot de paletas 0 con la id que quieras (0-127)
Creas el sprite de la pantalla 1 usando el slot de graficos 0 y el slot de paletas 0 con la id que quieras (0-127)
Actualizas los dos OAM de la libreria
Esperas al VSYNC
Actualizas los dos OAM de libnds

Listo.


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.

 

Sprites

Muchas gracias por responder.

Me estaba haciendo la p..... un lio. La aclaración me quede -sobre el papel - fantástica y agradezco la claridad por que no me quedaba claro.

 

Entiendo que el slot 0 de la pantalla 1 es diferente del slot 0 de la pantalla 0. ¿ Correcto ?

Una pregunta. Si un grafico tiene 32 x 32 x 8 animaciones, son 8 sprites o es uno animado. No me queda claro ( al asignarle un número, sería por ejemplo el 1, no del 1 al 8 verdad ????)

Ahora con lo que se acabe antes, ya me cuadra más.

 

Voy a probar a ver si puedo cargar dichos sprites en ambas pantallas. Pero una pregunta que me hago. un sprite cargado en la pantalla 1, ¿ se puede manejar en la pantalla 0? , o sea ( lo transfiero de la ram a laVram de la pantalla 0.  Puedo manejarlo desde la pantalla 1 sin cargarlo a vram de la pantalla 1?). ( Siento si soy pesado)

 

Muchas gracias.

Imagen de kNightFox

No, solo puedes mostrar

No, solo puedes mostrar graficos en la pantalla si estan cargados en VRAM.
Cada pantalla tiene 128 slots para sprites.
Si un sprite tiene 8 frames, solo ocupan 1 slot. Puedes cambiar el frame mostrado cuando quieras.
Varios sprites pueden compartir el grafico, por lo que solo ocupan 1 slot.

 


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.

 

probado

Gracias por contestar.

He probado DESPACIO la solución y por fin he podido trabajar con el mismo grafico en pantallas diferentes y ha funcionado. 

Aún así todavía me cuesta entenderlo, pero despacio seguro que lo consigo.

Pero tengo una duda,   con lo que has dicho sobre si varios sprites usan el mismo grafico solo usan un slot. Me lo puedes aclarar si no es mucha molestia.

 

Porque cuando usas un sprite n veces, pero cada uno tiene que tener su Número unico, como se cumple lo que solo usan un slot. Que me quieres decir, que si uso un sprite copiado 400 veces ¿ solo uso un slot? ( lo de 400 veces es un ejemplo, pero solo puedo usar 128 sprites en pantalla, no me aclaro del todo) ¿ me quedarían 127 entonces o realmente tendria 400 ?

Gracias por anticipado.

 

Imagen de kNightFox

A ver, tienes 128 slots para

A ver, tienes 128 slots para graficos en VRAM por pantalla y 128 Id's de SPRITES en el OAM por pantalla. El ejemplo de las bolas, usa un solo SLOT de graficos (ya que en todos los sprites es el mismo) pero 32 id's de sprites diferentes en el OAM.


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.

 

Sprites

Muchas gracias por contestar.

Ahora ya tengo claro el sistema de sprites.  Te agradezco que lo hayas contestado tan deprisa.

A ver si ahora soy capaz  de hacerlo funcionar, en algo jugable.

Juan Carlos.

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.