Anuncios Google

Ayuda con dos dudas de PAlib

Hola a todos, necesito que me ayudeis con dos dudas que me han surgido con PAlib

1.¿Se puede hacer que dos sprites, cuando se acerquen, se junten?y si se puede, ¿cómo?

 

2¿Cómo se puede hacer que al tocar un botón se cambie de color con el que se pinta?

 

Gracias por adelantadoGuiño


Gracias por la firma The Dark Master Guiño


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 sergiog12

¿hay alguien ahi que me

¿hay alguien ahi que me pueda responder?

Necesito ayuda, por favor !!!

wolas sergiog12, se me

wolas sergiog12,

se me ocurren 2 soluciones a tus preguntas.

 

*1.¿Se puede hacer que dos sprites, cuando se acerquen, se junten?y si se puede, ¿cómo?

yo haria colisiones, si 2 sprites se tocan, los borro y creo el nuevo sprite que simboliza a esos 2 juntos

 

*2¿Cómo se puede hacer que al tocar un botón se cambie de color con el que se pinta?

nose como nadie se ha dado cuenta, de que existen 3 variales muy majas que tienes declaradas al principio, (r,g,b)

para cambiar el color a verde haz esto:

if(Pad.Newpress.Y) 
{ 
r=0;
g=31;
b=0;
} 

y ya esta(si solo quieres cambiar el color al pulsar Y, haz eso, cambias el color y olvidate de un

PA_16bitDraw(...) que ya tienes uno que dibujara siempre al principio del while
Imagen de sergiog12

Gracias a los dos, acabó de

Gracias a los dos, acabó de probar lo que me decís, y funciona lo que me decís los dos, tanto best_guitar , como wiso_power, lo que pasa es que en el código de best_guitar, he quitado el else para pintar siempre de verde

Gracias a los 2 otra vezSonrisa


Gracias por la firma The Dark Master Guiño

Imagen de best_guitar

Sobre la pregunta de juntar

Sobre la pregunta de juntar los sprites, como te dije, utiliza la funcion PA_Dist, busca informacion sobre esta función y trata de comprenderla, luego estará todo hecho.

Y sobre los colores si te dibuja primero en verde y luego en negro es que no lo utilizas bien en el bucle de programa. supongo que para eso tienes que cambiar el color determinado o poner otra variable que sea color actual y que dibuje este color permanentemente.

Tal vez, deberias pegar el codigo que crees que falla y puede que veamos el fallo... Pero es importante entender PA_Dist para las colisiones primero.

Saluds!

Imagen de sergiog12

Con lo de PA_Dist, todavía

Con lo de PA_Dist, todavía no me he puesto porque he intentado solucionar lo de los colores.

Dejo aquí el código de los colores, haber si podeis ver el fallo:

// Includes
#include <PA9.h>       // Include for PA_Lib
 
 
s32 r = 0; 
s32 g = 0; 
s32 b = 0; 
 
 
// Function: main()
int main(int argc, char ** argv)
{
	PA_Init();    // Initializes PA_Lib
	PA_InitVBL(); // Initializes a standard VBL
 
	PA_Init16bitBg(0, 3);
	PA_Init16bitBg(1, 3);
 
	PA_SetBgColor(0, PA_RGB(31, 31, 31)); 
 
 
 
	// Infinite loop to keep the program running
	while (1)
	{
 
	PA_16bitDraw(0,PA_RGB(r, g, b)); 
 
// si pulsamos "B" borramos la pantalla
if (Pad.Newpress.Select){ 
   PA_Clear16bitBg(0);
} 
 
if(Pad.Newpress.Y) 
{ 
PA_16bitDraw(0,PA_RGB(0, 31, 0)); // de color verde, pero no funciona
} 
 
 
		PA_WaitForVBL();
	}
 
	return 0;
} // End of main()


Gracias por la firma The Dark Master Guiño

Imagen de best_guitar

en if(Pad.Newpress.Y)

en

if(Pad.Newpress.Y)
g=255;
else
g=0;

 

edito: Pad.Held.Y como deciamos al principio.

Imagen de sergiog12

Gracias, best_guitar

Gracias, best_guitar, pero no funcionó, ni lo que me dijistes tú, ni lo que dijo exterminator..Triste

¿Puede ser que no funcione porque lo estoy probando con iDeaS y no con una DS?


Gracias por la firma The Dark Master Guiño

Imagen de best_guitar

yo lo he probado y me

yo lo he probado y me funciona.

has puesto el Held?

el codigo entero es este...

// Includes
#include <PA9.h>       // Include for PA_Lib
s32 r = 0; s32 g = 0; s32 b = 0; 
 
// Function: main()
int main(int argc, char ** argv)
{
    PA_Init();    // Initializes PA_Lib
    PA_InitVBL(); // Initializes a standard VBL
 
    PA_Init16bitBg(0, 3);PA_Init16bitBg(1, 3);
 
    PA_SetBgColor(0, PA_RGB(31, 31, 31));
 
     // Infinite loop to keep the program running
    while (1)
    {
       PA_16bitDraw(0,PA_RGB(r,g,b));
// si pulsamos "B" borramos la pantalla
if (Pad.Newpress.B){
   PA_Clear16bitBg(0);
}
 
if(Pad.Held.Y) g=255;else g=0;
 
        PA_WaitForVBL();
}
    return 0;
 // End of main()
}

Imagen de exterminator

Tu error está

en que en tu código, sólo cambias el color mientras pulsas Y. Mejor pon esto:

// Includes
#include <PA9.h>       // Include for PA_Lib
 
 
s32 r = 0; 
s32 g = 0; 
s32 b = 0; 
 
 
// Function: main()
int main(int argc, char ** argv)
{
	PA_Init();    // Initializes PA_Lib
	PA_InitVBL(); // Initializes a standard VBL
 
	PA_Init16bitBg(0, 3);
	PA_Init16bitBg(1, 3);
 
	PA_SetBgColor(0, PA_RGB(31, 31, 31)); 
 
 
 
	// Infinite loop to keep the program running
	while (1)
	{ 
 
// si pulsamos "B" borramos la pantalla
if (Pad.Newpress.Select){ 
   PA_Clear16bitBg(0);
} 
 
if(Pad.Newpress.Y) 
{ 
PA_16bitDraw(0,PA_RGB(0, 31, 0)); // de color verde, pero no funciona
}
else  PA_16bitDraw(0,PA_RGB(r, g, b));
 
 
		PA_WaitForVBL();
	}
 
	return 0;
} // End of main()

Salu2


Para recibir ayuda por parte de otros usuarios más rápidamente, recomendamos que pongas títulos descriptivos y no utilices abreviaturas (estilo MSN) en tus post de los foros. Recuerda que accediendo al Manual del perfecto forero y las Normas de la Comunidad aprenderás trucos para resolver tus dudas antes.

Imagen de sergiog12

Gracias, exterminator

Gracias, exterminator, ahora mismo lo pruebo y te cuento.

Imagen de best_guitar

No has sido muy concreto con

No has sido muy concreto con la explicación, pero a ver si te ayudo...

1)deberias detectar la distancia entre ambos(PA_Dist), si llega a tal distancia, poner un sprite al lado del otro. Si el sprite 1 tiene un ancho de 32 poner el sprite 2, asi:

sprite2.x=sprite1.x+32 //32 o menos segun el dibujo que quieras juntar, ese valor lo  puedes ir probando hasta que quede bien.

sprite2.y=sprite1.y

2) puedes detectar la pulsacion del boton y despues cambiar el color de pixel

if(Pad.Held.X)

   PA_Put16bitPixel
(u8 screen, s16 x, s16 y, u16 color);//color obtenido de PA_RGB(red,
green, blue);

esto debe ir con fondo de 16bit.

Saluds!

Imagen de sergiog12

muchas gracias.¿pero como

muchas gracias.

¿pero como hago para que pinte de un color distinto al anterior botón?

haber si me explico,que si pulsa b se ponga azul, y que si pulso y se ponga verde

 

EDIT: ¿os importaría ponerme un ejemplo con cada uno?

gracias por adelantado otra vez


Gracias por la firma The Dark Master Guiño

Imagen de best_guitar

asi:

if(Pad.Held.B) PA_Put16bitPixel(0,posicionPuntero.x, posicionPuntero.y, PA_RGB(0,0,255); // de color azul(B)

if(Pad.Held.Y) PA_Put16bitPixel(0,posicionPuntero.x, posicionPuntero.y,
PA_RGB(0,255,0); // de color verde (G)

 

donde posicionPuntero es una estructura que guarda la posicion actual del pixel donde si quieres, pulsando un boton, puedes pintar.

No lo he probado pero tiene que ser algo así...

Imagen de sergiog12

No funciona

no funciona, así que he intentado esto, que tampoco funciona:

if(Pad.Newpress.Y) 
{ 
PA_16bitDraw(0,PA_RGB(0, 255, 0)); // de color verde (G)
}

Le he cambiado Held por Newpress, ya que Held lo que hacía era pintar un punto verde al presionar el Y, pero una línea no la pinta, la pinta de negro, el color que he pusto como predeterminado.

También he cambiado Held por Newpres por otra razón, que no haya que tener pulsado el botón para pintar de otro color, pero con Newpress no funciona nada.

¿Qué puedo hacer para que deje de pintar negro y pinte de otro color?


Gracias por la firma The Dark Master Guiño

Imagen de Froskito

haber..

mira, dentro del While pon esto:

if(Pad.Newpress.B){ 

PA_SetTextTileCol(0,//Pantalla
5//Color (del 1 al 9)
); 

}

if(Pad.Newpress.Y){ 

PA_SetTextTileCol(0,//Pantalla
2//Color (del 1 al 9)
); 

}

RECUERDA: que esto es solo para la pantalla de abajo, si es para los textos de la pantalla de arriba pon:

if(Pad.Newpress.B){ 

PA_SetTextTileCol(1,//Pantalla
5//Color (del 1 al 9)
); 

}

 

if(Pad.Newpress.Y){ 

PA_SetTextTileCol(1,//Pantalla
2//Color (del 1 al 9)
); 

}

 

Espero haberte ayudado

 


Desarrollando Super Mario Galaxy DS

http://SceneGames.byethost10.com <--MI WEB OFICIAL

Imagen de sergiog12

Gracias, Frøsκitø

Gracias, Frøsκitø, eso de la letras también me sirve, pero yo lo que busco es que al pulsar esos botones, el stylus pinte de un color o de otro.

Bueno, eso que me has dado lo copio, porque también lo pensaba usar en mi proyecto. Gracias


Gracias por la firma The Dark Master Guiño

Imagen de Froskito

ya ya me he dado cuenta

sorry, no leí bien, aunque lo del texto por lo menos ya lo tienes solucionado Lengua fuera

Imagen de sergiog12

Gracias a los dos

Gracias otra vez

Y muchas gracias también a best_guitar, sorry, no vi tu respuesta Lengua fuera

Muchas gracias a los dos por la ayuda

 Ahora mismo lo voy a probar best guitar, ya te contaré si funciona.

PD: ¿Os importaría ponerme un ejemplo de los de juntar sprites? por favor?


Gracias por la firma The Dark Master Guiño

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.