[DS] ¿Un sprite con dos paletas?

Buenas,

Mi pregunta es sencilla, ¿se pueden asignar dos paletas a un sólo sprite?

Por ejemplo, supongamos que yo tengo un sprite cuyo color mayoritario es el verde, pero en un momento dado lo quiero cambiar a azul. Se podría hacer esto simplemente haciendo un cambio de paleta? Es que he estado haciendo pruebas pero nanay... Se me corrompe la imagen y se muestran puntitos de colores o.O

Otra duda, ¿como se borra un sprite en pantalla?

PD: Hablo de PAlib :)
borrar un sprite:

PA_DeleteSprite (bool screen, u8 obj_number)


y la prgunta principal pues no te sabria contestarla, pero estaré al loro xq la respuesta me interesa para mi juego. :)
podrias asignar/desasignar paletas, pero yo no te lo recomiendo.

Es mejor que cojas el sprite con los 2 colores y hagas una animacion (2 frames) cuando quieras un color, un frame, y cuando quieras otro, otro frame.
jandujar escribió:podrias asignar/desasignar paletas, pero yo no te lo recomiendo.

Es mejor que cojas el sprite con los 2 colores y hagas una animacion (2 frames) cuando quieras un color, un frame, y cuando quieras otro, otro frame.


Era la otra opción que pensaba... Pero se me había ocurrido lo de las paletas para liberar algo de espacio xD

Bueno gracias jandujar, y gracias a ti también KaYiN :)
YaW escribió:
Era la otra opción que pensaba... Pero se me había ocurrido lo de las paletas para liberar algo de espacio xD

Bueno gracias jandujar, y gracias a ti también KaYiN :)

yo de programar en DS ni idea, pero lo de cambiar los colores de las paletas, no es algo que siempre se ha hecho para hacer juegos? al menos me suena mucho.... seguro que hay alguna manera :p no? (bueno, vale lo se... preguntando eso estoy en la misma suposición que el resto :p usease, npi.)
Por cierto, tengo otra duda y como ya tengo este hilo abierto pos aprovecho. Se puede hacer zoom a la vez en todos los elementos de una pantalla?

Osea, si en la pantalla de abajo por ejemplo tengo un fondo y 5 sprites encima, ¿hay alguna forma de hacer el mismo zoom sobre todos ellos sin tener que hacerlo uno por uno?
Creo q si, metiendolos todos en el mismo rotset.
efectivamente.

Pon el mismo rotset y listo
mmm ta todo interesante, no seria mejor crear un nuevo subforo para progarmacion en DS??
YaW escribió:Buenas,

Mi pregunta es sencilla, ¿se pueden asignar dos paletas a un sólo sprite?

Por ejemplo, supongamos que yo tengo un sprite cuyo color mayoritario es el verde, pero en un momento dado lo quiero cambiar a azul. Se podría hacer esto simplemente haciendo un cambio de paleta? Es que he estado haciendo pruebas pero nanay... Se me corrompe la imagen y se muestran puntitos de colores o.O

Otra duda, ¿como se borra un sprite en pantalla?

PD: Hablo de PAlib :)


Eso que dices se hace desde tiempos de NES, asi que supongo que si se puede.

Lo que se hacia en la NES no es cambiar la direccion de color del sprite, si no cambiar el color de la paleta por otro.
Si se puede cambia la paleta a un Sprite, es mas, en mi Sudoku tengo el mismo sprites para los numeros fijos (fondo gris) que para los numeros que pone el usuario (fondo blanco). Lo hago con un cambio de paleta y funciona perfectamente y es rapido y eficiente. Es un truco que se lleva utilizando desde hace muchísimo, ya que ahorra sprites y carga y descarga en memoria.
Yo lo que tengo son dos paletas, ahora pero si lo que quieres es cambiar un color de una paleta, accedes al array a la posicion que quieras y pones tu color, y actualizas tu sprites asignadole la "nueva" paleta, y voìla, sprite cambiado :)
A mi me resulto mas rapido tener dos paletas, y poner a un sprite u otro la paleta adecuada.
Morpheo17, explicame como lo has hecho porque yo con todas las pruebas que he intentado se me corrompe la imagen :-?

Por cierto, ya que está el hilo abiero sigo preguntando cosillas... ¿Es posible crear un sólo sprite y mostrarlo muchas veces? ¿Cómo?
¿Cúal es la forma más fácil de detectar si se hace una linea entre dos sprites?

Supongo que todas mis preguntas serán de novato 100%, pero es la primera vez que empeizo a programar cosas con gráficos y tal y todavia no le piyo el truco xD
Sobre lo de duplicar el sprite.

Hay dos formas con las palib, o clonas el sprite (me parece que la funciona es PA_Clone). O creas un recurso "GFX" con el contenido del sprite, y luego creas todos los sprites que quieras con ese recurso.

Te recomiendo que mires el directorio PA_Examples\Sprites\FromGFX


Y la forma mas facil de detectar si dos sprites estan alienados es mediante el uso de las coordenadas ( si tienen la X igual o la Y igual)

Espero haberte sido de ayuda
Muchas gracias jandujar, el ejemplo de las PAlib es exactamente lo que buscaba :)

Lo de la linea entre dos sprites me refiero a hacerla con el stylus. Por ejemplo, tener dos sprites en pantalla y que al hacer una linea que los una con el stylus pase algo... Pero bueno, investigaré sobre ello ^^
Si, como te ha dicho. Pero ten en cuetna que lo que tienes realmente son 2 sprites, por lo que ambos cuentan para el limite de 128 sprites ok?.

Sonbe lo de la linea, se me ocurre así, que detectes cuando pinche en un sprite y guardas el estado de que ha pinchado, y vayas viendo si ha tocado el otro sprite sin haber levantado antes el stylus (Stylus.held = 1). Es decir, que si ha tocado los dos sprites sin levantar el stylus, es una manera sencilla de realizarlo, y da igual si es recto o no, pero si es para "unir" dos cosas te vale, ahora si es para otra cosa y tiene que ser "recto recto" y hay que pensarlo más.

Espero haberte ayudado :)
Gracias por la solución :)

Así da gusto trabajar [burla2]
Ha salido una actualización de la PA libs (0.998c) que arregla unos cuantos bugs y añade esto: [Palettes] Added PA_SetSpritePalCol (aún no he mirado la documentación pa ver como funciona, pero digo yo que tiene que ver con tu pregunta inicial, no? XD)


Edito:

Aprovecho el hilo pa unas dudillas: yo estoy empezando a programar cosillas (por fin se acabaron los examenes) pero tengo dificultades con todo el tema de los sprites y demás, es que no tengo conocimientos de programación en cuanto a "entorno visual" (si, lo se, es muy triste), así que hay conceptos que no entiendo muy bien aunque mire los tutoriales.. entre ellos el concepto de Paleta de un sprite... no se muy bien que es lo que es o como funciona (vale, si, supongo que guarda los colores usados y que el sprite será una especie de "mapa" de cómo usar esos colores, no? ) pero... debo hacer una paleta por cada sprite diferente? cuantos sprites puedo meter en una misma paleta? no se si m explico, a lo mejor es muy básico pero nadie nace sabiendo :P pos eso, a ver si m echais una manita XD
A ver si te aclaro algunas dudas :)

Una paleta no es mas que un array (o vector) donde se guardan los colores, es decir, un mapa de colores. Viene a ser lo mismo que una paleta de un pintor, donde tiene sus colores para pintar en el cuadro.

Y un Sprite no es mas que otro array, que identifica por cada pixel que color de la paleta utiliza.

Ejemplo:

Supongamos que tenemos una paleta así:

paleta = {ROJO, VERDE, AZUL, BLANCO}

y un Sprite:

sprite = {0, 0, 0, 3, 3, 3}

Es decir, tenemos una paleta con 4 colores, y un sprite que es una linea (por ejemplo) con 3 pixeles rojos y otros 3 blancos. Un sprite no tiene información de color, sino que "colores" usa de la paleta. Ahora si tu coges y cambias el color de la paleta blanco (el 3) y lo pones por uno marron, nuestro sprite ahora sera blanco y marron sin tener que tocarlo....


Esto se utiliza mucho para los juegos. Por ejemplo, el Splinter Cell de móviles, tiene sus sprites base (Sam Fisher con todos sus movimientos) con su paleta básica (su traje normal), y luego además tiene varias paletas que cambia según el entorno, por ejemplo cuando se mete en la oscuridad cambia por una paleta que son tonos muy oscuros, luego tiene otra con agua en partes del cuerpo, otro en el sol ....
De esta manera ahorras muchisimo espacio, ya que tienes tus Sprites (que es lo que ocupa), y varias paletas que usas según te venga bien, ya que cada paleta ocupa muy poco (el Splinter Cell en cuestión son 14 colores por paleta).

Bueno, espero haberte ayudado y que no te haya abrumado mi rollo xD. Si hay alguna duda más preguntad :)
Muchísimas gracias tio, ya veo que lo de las paletas funcionaba parecido a como lo imaginaba, pero una aclaración final... entonces pueden usar todos los sprites que quiera una misma paleta mientras utilice menos de 256 colores?? (usando una paleta de 256, evidentemente)

weno, y ya que me pongo otra dudilla que no entiendo muy bien a que se debe...

si se hace un bucle de este estilo:

while(1){
if(Pad.Held.A)break;
};


no funciona

sin embargo si ponemos:

while(1){
PA_WaitForVBL();
if(Pad.Held.A)break;
};


o si ponemos:


while(1){
PA_OutputSimpleText(1, 8, 19, "estoy");
if(Pad.Held.A)break;
};


si que funciona, a que se debe? es que la explicación que dan en la web de las PAlibs sobre PA_WaitForVBL() no es que me diga mucho.. que sólo pone que es pa que el juego no vaya a una velocidad injugable, pero mu científico como que no es..



P.D: Lo siento Yaw, que estoy usando tu hilo...
Quizá deberíamos haberlo puesto en el de "Programación de DS" de arriba? o estaría bien hacer un hilo aparte con dudas de programación de ds en general?
PA_WaitForVBL() lo que hace es esperar a un nuevo frame, de esta forma puedes controlar el tiempo que pasas entre una acción y otra por ejemplo.

La verdad es que no se la razón por la cual no te deja hacer el primer while que pones cuando en teoría es correcto pero creo que es porque al no poner el PA_WaitForVBL no está "transcurriendo" el tiempo así que todo el while ni se ejecutaria.

El resultado que quieres obtener supongo que funciona metiendo el PA_WaitForVBL ¿no? Entonces dejalo así y ya está xD

PD: Muchas gracias por lo de la paleta Morpheo17 ^^
PD2: Estaria bien crear un hilo destinado a preguntas d eprogramación, aunque no se si con el post-it de arriba ya es suficiente...
PA_WaitForVBL() ademas actualiza las variables (posicion del stylus, pad, sprites, etc....) por eso si no lo pones no te funciona.
La razón por lo que no te funciona te lo ha explicado correctamente jandujar.

Darksilvano, puedes utilizar la paleta tantas veces como quieras, no hay limite de "uso", solo de númeor de paletas cargadas simultaneamente. Lo mismo pasa con los Sprites, solo puedes tener 128 simultaneos, si necesitas mas tienes que crear y destruir dinámicamente.

YaW, de nada :). Por comodidad deberiamos usar el hilo de arriba, ya que es el que estoy suscrito y sino se me escapan muchos hilos y no contesto, yo creo que es el hilo más adecuado, sino se podría crear uno pero sería redundante creo, que decidan los mods.
weno, pos gracias a todos una vez más, y ya las próximas dudas las pondré en el de arriba

Jandujar en la nueva versión de las PAlibs te nombran 2 veces! enhorabuena XD [tadoramo]

Por cierto ya casi he dejao de mirar los tutoriales de las PA_libs, he visto que es mucho mejor o mirar la documentación, o mirar directamente como están definidas las funciones, además viendo el código ves partes comentadas de posibles nuevas funciones y cosas asi XD

P.D: He visto muchos comentarios en francés, los que se las están currando son todos franceses?
hay mucho gabacho porque mollusk es de paris, y si alguien pone un post en frances el lo contesta. Pero hay gente de todo el globo.

Aunque mayoritariamente es mollusk quien ha echo la libreria (por cierto, una gran idea)
24 respuestas