Jump to content
Sign in to follow this  
Quaternion

My sistema de boleanas no funciona muy bien.

Recommended Posts

Hola a todos!

Esto es lo que estoy intentando hacer:

 

1- If "BoolTimerList1" es true y cuando "TimerList1 " es == -0.01f  entonces "BoolTimerList1" es falso y  "BoolTimerList2" es true.

2-If "BoolTimerList2" es true y cuando "TimerList2 " es == -0.01f entonces  "BoolTImerList2" is false and "BoolTimerList3" es true.

3- If "BoolTimerList3" es true y cuando "TimerList3" es == -0.01f entonces "BoolTimerList3" is false and "BoolTimerList4" es true.

4-If "BoolTimerList4" es true y cuando "TimerList4" es == -0.01f entonces "BoolTimerList4" is false and "BoolTimerList1" es true.

 

Pero tengo un problema:

Cuando "TimerList3" es == -0.01f no se desactiva.. por lo tanto "BoolTimer4" no puede ser true.

 

¿Que debería suceder?

"timerList3" debería desactivarse y "BoolTImer4" activarse.

 

VIDEO QUE MUESTRA EL PROBLEMA:  https://drive.google.com/open?id=1T638dzP8Z4F0q-Hi8BNOcQ3nPa_L3ysJ

 

ESTE ES MI CODIGO: https://hatebin.com/wqihjeegqt

**Solo teneis que fijaros desde las lineas 58 hasta la linea 129 que es donde se encuentran las boleanas**

¿Como puedo solucionar este problema?

Espero que este problema se pueda solucionar, Un saludo!!

Edited by Quaternion

Share this post


Link to post
Share on other sites

No he visto el código. Independientemente por el hecho de que hacer una lista de if's es muy poco legible, estás comparando valores float que nunca serán exactos entre si.

Share this post


Link to post
Share on other sites

No estás haciendo correctamente la lógica de los IF's de los TimerList. Mejor reestructura completamente el código de nuevo. Si organizas todo como una clase o estructura propia, y luego haces una colección de varias de ellas, te saldrá mejor...

Share this post


Link to post
Share on other sites

cuidado con los float...

si le dices a un float "eres 0.01f" seguramente no sea 0.01f sino 0.010001f... o cualquier otra cantidad rara parecida...

pon un Debug.Log() para ver que cifra es exactamente ese float...

...y te aconsejo que en vez de comprobar si es == 0.01f compruebes si es < 0

eso deveria funcionar...

 

Edited by Igor

Share this post


Link to post
Share on other sites

Buenas Quaternion. A ver, tu caso en concreto no se si lo podré resolver, aunque lo que te han dicho por arriba de que cambies los  "if (TimerList2 == -0.01f) " por "if (TimerList2 <= 0.01f) podría ayudar.

No obstante viendo tu codigo he visto algunas cosillas que te pueden ser útiles.

Para empezar cuando defines booleans al principio, no hace falta que pongas que todos son falsos, ya que siempre lo son por defecto, ademas, luego en el Start te aseguras de que lo sean, asi que es redundante, con poner:


public bool BoolTimerList1 , BoolTimerList2 , BoolTimerList3, BoolTimerList4 ;

Mas que suficiente.

Ademas puedes probar a jugarlo con CASE, yo una vez lo usé para un caso similar y me sirvió, no recuerdo como era exactamente pero vamos:, te dejo un tutorial por aquí:
 

 

¡Suerte!

Share this post


Link to post
Share on other sites
On 7/18/2019 at 5:09 PM, Quaternion said:

¿Como puedo solucionar este problema?

Andate al inspector, poné arriba modo Debug, al lado del candado. Dale play y revisá todas las variables, si todo pasa muy rápido andate a ProjectSettings/Time y reducí la escala temporal.

Del código, si tenés varios ifs sospechá que algo va por mal camino (a la larga va a ir seguro), lo mejor es manejarte por estados si podés o tratar de crearte una clase a parte (C#) que te organice todo un poco.

Por ej (no digo que ande, es una pequeña modificación) con esto podés configurar cada timer, chequear si llegan a la cuenta y resetearlos:

https://hatebin.com/qnmglgfcrk

Las 4 bools las cambié por un int, ya que siemrpe tenés uno en true y el resto el false.

On 7/21/2019 at 7:41 PM, Igor said:

..y te aconsejo que en vez de comprobar si es == 0.01f compruebes si es < 0

Yo también pensé en eso, pero como ambos floats se representan igual la comparación debería ser correcta (si es que antes impone que sea = -0.01f) ... y ya que está pregunto, @Quaternion por qué el "-0.01f" ?? hace de reset?

Share this post


Link to post
Share on other sites
Sign in to follow this  

UnitySpain © Todos los derechos reservados 2020
×
×
  • Create New...