Ayuda con Switch Case

 
Publicar Nuevo Tema   Responder al Tema    Índice del Foro Diseño DooM -> Edición de mapas
Ver tema anterior :: Ver siguiente tema  
Autor Mensaje
DKC-Hysteria
Mapeador



Registrado: 27 Mar 2008
Mensajes: 115
Ubicación: México

MensajePublicado: Dom Sep 02, 2012 11:17 pm    Título del mensaje: Ayuda con Switch Case Responder citando

Hola caballeros tengo una pequeña duda con Switch case.
Tengo 4 botones y cada vez que actives 1, quiero un mensaje y acción diferente. lo quiero hacer con un Switch Case.

Script 9 (Void)
{
Switch (Button)
{
Case 1:
SetHudSize(640, 400, 0);
Setfont("dbigfont");
Hudmessage(s:"1 de 4";
HUDMSG_FADEOUT, 0, CR_GREEN, 320.4, 190.0, 1.0, 1.0);
Break;

Case 2:
SetHudSize(640, 400, 0);
Setfont("dbigfont");
Hudmessage(s:"2 de 4";
HUDMSG_FADEOUT, 0, CR_GREEN, 320.4, 190.0, 1.0, 1.0);
Break;

Case 3:
SetHudSize(640, 400, 0);
Setfont("dbigfont");
Hudmessage(s:"2 de 4";
HUDMSG_FADEOUT, 0, CR_GREEN, 320.4, 190.0, 1.0, 1.0);
Break;

Case 4:
SetHudSize(640, 400, 0);
Setfont("dbigfont");
Hudmessage(s:"2 de 4";
HUDMSG_FADEOUT, 0, CR_GREEN, 320.4, 190.0, 1.0, 1.0);
Break;
}
}

Mi pregunta es..... como llamo cada Case?, como le pongo para que cuando active el boton 1 llame el Case 1, cuando active el segundo boton llame el Case 2, lo intente con IF e incrementando una variable, pero a la primera se me increntaba todo y el primer boton hacia lo de los 4, algo asi:

Script 8 (Void)
{

If(Button == 0)
{
SetHudSize(640, 400, 0);
Setfont("dbigfont");
Hudmessage(s:"1 de 4";
HUDMSG_FADEOUT, 0, CR_GREEN, 320.4, 190.0, 1.0, 1.0);
Button++;
}

If(Button == 1)
{
SetHudSize(640, 400, 0);
Setfont("dbigfont");
Hudmessage(s:"2 de 4";
HUDMSG_FADEOUT, 0, CR_GREEN, 320.4, 190.0, 1.0, 1.0);
Button++;
}

}

Mi duda es como llamar cada Case del switch, para no usar el if anidado, Gracias

Volver arriba
Ver perfil del usuario Enviar mensaje privado Enviar correo MSN Messenger
Aluqah
Gurú del Mapeo



Registrado: 01 Dic 2006
Mensajes: 156

MensajePublicado: Lun Sep 03, 2012 12:59 am    Título del mensaje: Responder citando

Haces así:


Código:
Script 9 (int Button)
{

...

}



Ahora, cada vez que llames el script, la variable Button tendrá el valor del primer "Script argument" o "arg" que aparece en las propiedades de la línea que activa el script.


Sólo tienes que darle un valor diferente en cada línea de los 4 borones.



Si en vez de una línea, se llama desde otro script, se lo agregas con una coma:

Código:
ACS_EXECUTE(9,0,número que le pasas a button);


-----

P.D.: Con eso basta, no definas la variable button al comienzo, fuera de los scripts, como se hace normalmente,

Código:
int Button;

_________________
- Aluqah's Web -

Volver arriba
Ver perfil del usuario Enviar mensaje privado Visitar sitio web del autor
DKC-Hysteria
Mapeador



Registrado: 27 Mar 2008
Mensajes: 115
Ubicación: México

MensajePublicado: Lun Sep 03, 2012 4:27 am    Título del mensaje: Responder citando

Oh muchas gracias, si con ACS_EXECUTE ya puedo elegir cual Case elegir, pero ahora me surgio algo más..... ya tengo los 4 casos. en el primero Button vale 0, en el otro 1, luego 2 y luego 3, ya que tienen un Button++; y se van incrementando, cuando se activa el primer button se activa el script 8 que dice ACS_Execute(8,2,1) Script 8, mapa 2, primer argumento. y sale la leyenda 1 de 4, y se incrementa Button++; para que cuando activen el segundo, button ya vale 1 y la leyenda dice 2 de 4..... el problema ahora es el siguiente...... al primer boton le puse que ejecute el script 9 y al segundo boton script 10 y a los otros dos botones seran script 11 y 12 la cosa es que serán 4 botones para cuando esten los 4 activados pase algo, el problema es.... que tal si precionan primero el boton 2 cuando Button aun vale 0 y el script dice que debe valer 1 para que diga 2 de 4...... si me explico? aqui el script que tengo:

Script 8 (Int Button)
{
Switch (Button)
{
Case 1:
If (Button == 0)
{
SetHudSize(640, 400, 0);
Setfont("dbigfont");
Hudmessage(s:"1 de 4";
HUDMSG_FADEOUT, 0, CR_GREEN, 320.4, 190.0, 1.0, 1.0);
Button++;
}
Break;

Case 2:
If (Button == 1)
{
SetHudSize(640, 400, 0);
Setfont("dbigfont");
Hudmessage(s:"2 de 4";
HUDMSG_FADEOUT, 0, CR_GREEN, 320.4, 190.0, 1.0, 1.0);
Button++;
}
Break;

Case 3:
If (Button == 2)
{
SetHudSize(640, 400, 0);
Setfont("dbigfont");
Hudmessage(s:"3 de 4";
HUDMSG_FADEOUT, 0, CR_GREEN, 320.4, 190.0, 1.0, 1.0);
Button++;
}
Break;

Case 4:
If (Button == 3)
{
SetHudSize(640, 400, 0);
Setfont("dbigfont");
Hudmessage(s:"4 de 4";
HUDMSG_FADEOUT, 0, CR_GREEN, 320.4, 190.0, 1.0, 1.0);
Button++;
}
Break;
}
}

Script 9 (Void)

{
Acs_Execute(8,2,1);
}

Script 10 (Void)

{
Acs_Execute(8,2,2);
}

Volver arriba
Ver perfil del usuario Enviar mensaje privado Enviar correo MSN Messenger
Aluqah
Gurú del Mapeo



Registrado: 01 Dic 2006
Mensajes: 156

MensajePublicado: Lun Sep 03, 2012 1:21 pm    Título del mensaje: Responder citando

Pusiste ASC_execute(8,2,1) ¿ese script lo ejecutas desde otro mapa? De momento asumo que no.

Si no entendí mal, quieres hacer esto:

Todos los botones ejecutan el mismo script 8. La parte que dice d:CuantoButton imprimirá el valor de la variable cada vez que llames al hudmessage

Código:
int CuantoButton;   //Uso otra variable para no confundir

Script 8 (void)
{
CuantoButton = CuantoButton + 1;  // a mi me gusta así, si quieres pon el CuantoButton++

SetHudSize(640, 400, 0);
Setfont("dbigfont");

Hudmessage( d:CuantoButton , s:" de 4;
HUDMSG_FADEOUT, 0, CR_GREEN, 320.4, 190.0, 1.0, 1.0);

if (CuantoButton==4)
{

//lo que sea que pase cuando presiones los 4

}

}

_________________
- Aluqah's Web -

Volver arriba
Ver perfil del usuario Enviar mensaje privado Visitar sitio web del autor
DKC-Hysteria
Mapeador



Registrado: 27 Mar 2008
Mensajes: 115
Ubicación: México

MensajePublicado: Lun Sep 03, 2012 4:37 pm    Título del mensaje: Responder citando

Muchas gracias aluqah, exactamente eso era lo que queria hacer, a veces me falla mi logica jaja, Gracias te debo una.

Volver arriba
Ver perfil del usuario Enviar mensaje privado Enviar correo MSN Messenger
Mostrar mensajes anteriores:   
Publicar Nuevo Tema   Responder al Tema    Índice del Foro Diseño DooM -> Edición de mapas Todas las horas están en GMT + 2 Horas
Página 1 de 1

 
Saltar a:  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas


Powered by phpBB

Todos los contenidos de esta página, salvo que conste un autor o licencia diferente, están licenciados bajo la Licencia Creative Commons
DOOM y DOOM II son marcas registradas de id Software, Inc.