Tengo una variable llamada turnRadius que proviene de la entrada del usuario y puede estar entre -1 y 1, siendo 0 el valor predeterminado.
Luego tengo que convertir este número en su equivalente en un rango de 275 y 0 y almacenarlo en la variable spriteHorizontalPosition .
El problema es que, por motivos, no puedo esperar que el usuario establezca turnRadius en -1 o 1, por lo que quiero que cuando turnRadius alcance 0.65 o -0.65 , aumente exponencialmente a su máximo/mínimo para que el usuario no tenga que alcanzar el número completo con entrada.
Creo que entendí la idea, pero no sé cómo escribir la función, ¿puedo tener ayuda?
A continuación se muestra lo que tenía, pero soy consciente de que no es exponencial y cuando llega a 0,65, el spriteHorizontalPosition se estira repentinamente al máximo y se ve incómodo.
let turnRadius = user.input; if (turnRadius <= -0.65) { turnRadius = -1; } else if (turnRadius >= 0.65 ) { turnRadius = 1; } spriteHorizontalPosition = ((turnRadius * -1) + 1) * 137.5; if ( spriteHorizontalPosition >= 275 ) { spriteHorizontalPosition = 275; } else if ( spriteHorizontalPosition <= 0 ) { spriteHorizontalPosition = 0; } playerSprite.transform.x = spriteHorizontalPosition;¿Qué tal una buena curva cúbica para mapear entre la entrada de usuario realista posible (-0.65..0.65) y el rango de usuario deseado (/virtual) (-1..1)?
La curva suave cubicMap se puede dar como:
const A = 0.65; const C = 1/A - A*A; const cubicMap = (x) => { if (x > 0.65) return 1; if (x < -0.65) return -1; return C*x + x*x*x; } Como se ve en este gráfico: Desmos Link , asigna la entrada del usuario entre -0.65 y 0.65 sin problemas a entre -1 y 1 .
Su código podría verse así:
const turnRadius = cubicMap(user.input); const spriteHorizontalPosition = 275 * (1 + turnRadius) / 2; playerSprite.transform.x = spriteHorizontalPosition; No hay necesidad de declaraciones if adicionales, el valor ya está fijado por cubicMap .