Hola otra vez, quería saber cómo podría solucionar este error:
IndexOutOfRangeException: Array index is out of range.
NewBehaviourScript.Update () (at Assets/01/Scripts/Music/NewBehaviourScript.cs:29)
El objetivo era que al llegar al valor límite del array, comenzara de nuevo en pulsar "+" o, en estar al inicio y pulsar" –" se dirigiese al final, como un circulo .
string[] txt = new string[4] {"a", "b", "c", "d"};
int valores = 0;
void Update () {
if(valores < 0)
{
valores = 3;
}
if(valores > 3)
{
valores = 0;
}
if(Input.GetKeyDown(KeyCode.KeypadPlus))
{
valores++;
}
if(Input.GetKeyDown(KeyCode.KeypadMinus))
{
valores--;
}
Debug.Log (txt[valores]);
}
El juego puede ejecutarse, pero este problemita no me gusta que salga. ¿Por qué pone que salgo del array? ¿En los dos primeros ifs, acaso no he los he condicionado para que no salga del array?
Un saludo y gracia
Cita de: yhuj date=1500209111¿En los dos primeros ifs, acaso no he los he condicionado para que no salga del array?
if(input 1)
valor++;
if(input 2)
valor--;
//podrias verificar dentro de los if y evitar que sume o reste, yo prefiero que haga lo que haga y luego acomodo
//si lo que vas a hacer es demandante claro verifica antes que es mas barato
valor = Mathf.Clamp(valor, min , max);
//en este punto esta todo bien por el clamp
de aca en adelante no deberias tener problema de outOfIndex
Aja, ya veo. No conocía Clamp... pero con este método me crea un tope, es decir, que cuando llego al 3 no puedo pasar al 0 y viceversa. Y además me sigue saliendo el IndexOutOfRangeException: Array index is out of range. He seguido tu consejo, es decir, he substituido los dos primeros condicionales por el Clamp.
Ten en cuenta que como he dicho en anteriores veces, soy un iniciado en programación y la solución puede estar en frente de mis narices sin darme cuenta; así que sigo sin entender porque sigue el mismo error.
Por cierto, no te entiendo a qué te refieres con esto:
//si lo que vas a hacer es demandante claro verifica antes que es mas barato
[/quote]
Cita de: yhuj date=1500222305Aja, ya veo. No conocía Clamp... pero con este método me crea un tope, es decir, que cuando llego al 3 no puedo pasar al 0 y viceversa.
Cita de: yhuj date=1500222305He seguido tu consejo, es decir, he substituido los dos primeros condicionales por el Clamp.
Cita de: yhuj date=1500222305Ten en cuenta que como he dicho en anteriores veces, soy un iniciado en programación y la solución puede estar en frente de mis narices sin darme cuenta; así que sigo sin entender porque sigue el mismo error.
Cita de: Arthure date=1500224516el Clamp en este caso no servira para nada, bueno corrijo ... no servira para lo que se quiere conseguir;
Comprobar resultado -> Leer teclas y modificar valor -> Utilizar resultado (orden erroneo)
Leer teclas y modificar valor -> Comprobar resultado -> Utilizar resultado (orden correcto)
Espero que hayas entendido que cambio debes realizar en tu codigo para que funcione sin errores y que ademas consigas que salte de la primera a la ultima posicion y viceversa
[/quote]
¡Excelente! Problema resuelto. Así que en este caso el orden de los factores no altera el producto pero sí a la consola...
Re-Edicion. Por si acaso no has pillado la idea, tu codigo esta correcto ... solo tienes que cambiar el orden de las lineas.
[/quote]
Tranquilo, sí ha quedado claro. Te has explicado muy bien. Muchas gracias por la explicación.
Si te sigue el error anda debugueando vos hasta encontrar la logica correcta
[/quote]
El problema está solucionado, pero gracias por toda esta explicación realmente es útil e interesante.
si te ponemos el codigo no te sirve de nada.
[/quote]
Te doy toda la razón, de hecho lo prefiero así, que vayáis dando consejos y caminos para orientarme para así aprender de mis errores.
no has probado usar else if?
[/quote]
Si te digo la verdad, ni se me había pasado por la cabeza. Pese tener el problema resuelto voy a ver qué tal, gracias por la idea.