Obtener flags sin un if.

Discusión en general sobre Gemix.

Obtener flags sin un if.

Postby shao » Wed Jun 24, 2015 11:15 am

Puede parecer una tontería pero hasta ahora, para setear la flags a un sprite, dependiendo de su X respecto a la X del personaje, hacía esto:

Source Code (Gemix) [ Download ] [ Hide ]
  • if(idPersonaje.x > x)//si la X del personaje es mayor a la del proceso
  •    flags = 0;
  •  
  • else
  •    flags = 1;
  •  
  • end


También se podría hacer así y eliminar el else:

Source Code (Gemix) [ Download ] [ Hide ]
  • flags = 0;
  •  
  • if(idPersonaje.x < x)//si la X del personaje es mayor a la del proceso
  •    flags = 1;
  •  
  • end


Pero aún se puede simplificar más, comprobando si podría eliminar eso con un XOR e probado algunas cosas hasta llegar a esto:

Source Code (Gemix) [ Download ] [ Hide ]
  • flags = x > idPersonaje.x;


Funcionó, nunca había pensado en esa forma de utilizar > sin un if, la flags se pone en dirección al personaje cuando corresponde, y no necesitas un if/else para eso.

La flags valdrá 0 cuando la X del proceso sea menor que la del personaje (la comparación/condición, no estoy seguro de qué es exactamente aunque diría que es una condición, devolverá 0, falso) y 1 cuando la X del proceso sea mayor a la X del personaje (devolverá 1, verdadero).

Operador lógico [mayor que] utilizado en condiciones. Debe utilizarse entre dos expresiones numéricas y devuelve un resultado lógico:

Falso - Si la primera expresión NO es mayor que la segunda.

Cierto - Si la primera expresión SI es mayor que la segunda.


Esto te lleva a usarlo de otros modos, por ejemplo, quiero que si un proceso esta ascendiendo en un salto tenga el gráfico 36, y si desciende tenga el 37, entonces se podría usar así:

Source Code (Gemix) [ Download ] [ Hide ]
  • graph = 36 + (gravedad > 0);


Hay que usar paréntesis ya que el operador + tiene mayor prioridad, si no se usaran paréntesis, entonces primero se sumaría "36 + gravedad" y luego se comprobaría si ese valor es mayor que 0.
El gráfico será 36 cuando la condición sea falsa (devolverá 0), osea, cuando este ascendiendo.
El gráfico será 37, resultado de sumarle 1 al ser la condición verdadera, cuando la gravedad sea mayor que 0 y este descendiendo.
User avatar
shao
 
Posts: 5991
Joined: Wed Jun 17, 2009 4:51 pm

Re: Obtener flags sin un if.

Postby CicTec » Wed Jun 24, 2015 12:44 pm

Pues es normal, se trata de una expresion (llamada propriamente expresion condicional) y puede ser utilizada en cualquier punto donde se permita una expresion.
User avatar
CicTec
 
Posts: 16328
Joined: Thu Jul 31, 2008 10:18 pm

Re: Obtener flags sin un if.

Postby shao » Wed Jun 24, 2015 1:40 pm

Ya pero no se me había ocurrido antes, si no, creo que siempre lo habría hecho así.
User avatar
shao
 
Posts: 5991
Joined: Wed Jun 17, 2009 4:51 pm

Re: Obtener flags sin un if.

Postby shao » Wed Jun 24, 2015 2:31 pm

Sobre este tema, ¿como puedo conseguir esto?.

Source Code (Gemix) [ Download ] [ Hide ]
  • flags = x > prota.idPersonaje.x;
  •                         aumX = 3 * ?¿?¿;


Quiero que aumX valga -3 si flags vale 1.
Y que aumX valga 3 si flags vale 0.

Creo que tendría que utilizar xor para multiplicar 3 por -1 o por 1 pero no se como se le podría cambiar el signo a un número así.

¿Se puede hacer?, ¿como?.

Podría hacer esto:

if(flags == 0)
aumX = 3;

end

Pero me gustaría saber si es posible de ese otro modo.
User avatar
shao
 
Posts: 5991
Joined: Wed Jun 17, 2009 4:51 pm

Re: Obtener flags sin un if.

Postby CicTec » Wed Jun 24, 2015 5:31 pm

Con XOR no puedes, puedes usar el operador ternario si no quieres usar la sentencia IF:
Source Code (Gemix) [ Download ] [ Hide ]
  • aumX = flags ? -3 : 3;
  •  
User avatar
CicTec
 
Posts: 16328
Joined: Thu Jul 31, 2008 10:18 pm

Re: Obtener flags sin un if.

Postby shao » Wed Jun 24, 2015 6:13 pm

Ok, es poco usual ese modo pero es más rapido de escribir.
Gracias.
User avatar
shao
 
Posts: 5991
Joined: Wed Jun 17, 2009 4:51 pm

Re: Obtener flags sin un if.

Postby CicTec » Wed Jun 24, 2015 6:34 pm

De verdad en C/C++/Java es mas usual esto en istrucciones de este tipo que no un IF.

De nada.
User avatar
CicTec
 
Posts: 16328
Joined: Thu Jul 31, 2008 10:18 pm

Re: Obtener flags sin un if.

Postby shao » Wed Jun 24, 2015 7:00 pm

Seguramente, como la mayoría de código que veo es Gemix, no estoy muy acostumbrado a verlo así.
User avatar
shao
 
Posts: 5991
Joined: Wed Jun 17, 2009 4:51 pm


Return to General

Who is online

Users browsing this forum: No registered users and 2 guests