Autor Tema: Reducción de la velocidad normalmente y cuando intenta dar marcha atrás.

0 Usuarios y 1 Visitante están viendo este tema.

13 Junio, 2025, 12:11 pm
Leído 1142 veces

Tachikomaia

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,297
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
Cuando el personaje se mueve a un sitio normalmente, avanza a 0.5 pixeles por frame. Se supone que 1 frame en mi caso son 1/120 segundos, pero no importa, imaginen que fuese 0.5 pixeles por segundo.

Pero si algo lo empujó, la velocidad conque avanza puede ser mayor.

Se debe ir reduciendo, quisiera que me den ideas de cómo.

Yo puse (esto es para cuando fue empujado):

Si el personaje intenta ir a la dirección contraria, o sea, si por ejemplo lo empujaron a la derecha y él intenta ir a la izquierda, la velocidad conque se mueve a la derecha será reducida 0.5 por frame mientras siga intentando ir a la dirección contraria.

Si nada hace, la velocidad se irá reduciendo 0.01 por frame.

Si va hacia la misma dirección, no tengo mucha idea de qué poner, entiendo que la reducción debe ser menor a 0.01, pero no quiero poner un valor cualquiera, quiero que sea acorde a la velocidad natural del personaje. Se me ocurre que podría ser una división pero a la vez pienso que no sirve, por ejemplo:
VelocidadActual = (VelocidadActual+VelocidadNatural)/2
Eso puede causar que la velocidad actual pase a ser la natural mucho más rápido que restándole 0.01 ¿no? Como si por caminar hacia el mismo lado que fue empujado frenara más rápido que quedándose quieto, eso no puede ser.

13 Junio, 2025, 04:16 pm
Respuesta #1

Abdulai

  • Moderador Global
  • Mensajes: 3,044
  • País: ar
  • Karma: +0/-0
  • Sexo: Masculino
... Se me ocurre que podría ser una división pero a la vez pienso que no sirve, por ejemplo:
VelocidadActual = (VelocidadActual+VelocidadNatural)/2
Eso puede causar que la velocidad actual pase a ser la natural mucho más rápido que restándole 0.01 ¿no? Como si por caminar hacia el mismo lado que fue empujado frenara más rápido que quedándose quieto, eso no puede ser.
Podés hacer  \( VelocidadActual = (1-a)\cdot VelocidadActual+a\cdot VelocidadNatural = VelocidadActual  - a\cdot (VelocidadActual-VelocidadNatural) \)
Con \( a=0.5 \)  es igual a la fórmula que escribiste.
Cuanto mas cercano a 0 sea \( a \) mas lentamente volverá a la velocidad natural.

14 Junio, 2025, 12:42 am
Respuesta #2

Tachikomaia

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,297
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
Ten en cuenta que 0.5 es una velocidad ejemplo, podría ser que aumente cuando el personaje suba de nivel, o que baje si se usa otro personaje o por algún motivo.

Pones 1-0.5 ¿pero si la velocidad fuese 1 o más? ¿funcionaría también?


Pensando en el tema se me ocurrió esto:

Reducción yendo hacia el mismo lado: (Moving+Speed)/2

Reducción normal: Moving/2

Reducción por dar marcha atrás: (Moving-Speed)/2

Tendría que probarlo, creo que frenaría demasiado rápido ¿qué les parece?

14 Junio, 2025, 10:30 pm
Respuesta #3

Abdulai

  • Moderador Global
  • Mensajes: 3,044
  • País: ar
  • Karma: +0/-0
  • Sexo: Masculino
Ten en cuenta que 0.5 es una velocidad ejemplo, podría ser que aumente cuando el personaje suba de nivel, o que baje si se usa otro personaje o por algún motivo.
Pones 1-0.5 ¿pero si la velocidad fuese 1 o más? ¿funcionaría también?
...

No,no.  \( 0<a<1 \)  es un parámetro relacionado con la aceleración/des  por frame. Para 0 no frena nunca y para 1 es instantáneo.

Si por ejemplo hacés \( a=0.01 \)  te va a quedar: \( VelocidadActual = 0.99\cdot VelocidadActual+0.01\cdot VelocidadNatural \)
Pero de acuerdo a la cantidad de frames por segundo y la desaceleración deseada puede ser poco o excesivo --> No hay problema, vas jugando con su valor hasta tener el efecto deseado. 



15 Junio, 2025, 12:29 am
Respuesta #4

Tachikomaia

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,297
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
Ok, había entendido mal, pensé que la variable a debía ser como la velocidad del personaje, ya que casualmente era el mismo número, pero ya entiendo que es para que se haga *0.5, que es igual a /2 como había puesto.

18 Junio, 2025, 02:03 pm
Respuesta #5

Tachikomaia

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,297
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
Lo más lógico que veo es:

Reducción yendo hacia el mismo lado: (Moving+Speed)/2

Reducción normal: Moving/2

Reducción por dar marcha atrás: (Moving-Speed)/2

...que sin embargo veo que no tiene los mismos nombres que puse al inicio, lo que pasa que eso es del código y me olvidé que aquí estaba usando otras palabras.
Moving es velocidad actual, o sea a cuánto se está moviendo, y Speed es la velocidad natural.

Creo que se entiende, pero esas fórmulas no sirven.

Si le pongo 2, frena rapidísimo.
Si le pongo 1.5, cuando va al mismo lado que fue empujado entonces la velocidad no baja hasta la natural. Por ejemplo:
Moving por ser empujado: -2.86
Izquierda con empuje: -2.24
Izquierda con empuje: -1.82666666666667
Izquierda con empuje: -1.55111111111111
Izquierda con empuje: -1.36740740740741
Izquierda con empuje: -1.24493827160494
Izquierda con empuje: -1.16329218106996
Izquierda con empuje: -1.10886145404664
y sigue bajando pero hasta -1, cuando debería ser -0.5, es como que
(1+0.5)/1.5
no puede ser menos de 1. Y ahí se ve claro por qué. Si la velocidad naturel fuera 0.8, dividir entre 1.8 causaría el mismo problema. Si fuera 1, imagino que ni siquiera serviría dividir entre 2:
(5+1)/2 = 6/2 = 3
(3+1)/2 = 4/2 = 2
(2+1)/2 = 3/2 = 1.5
(1.5+1)/2 = 2.5/2 = 1...
quizá me equivoque...


La fórmula que me das parece excesivamente complicada para algo que, como dije, no lo parece tanto.

A ver, sería:

Reducción yendo hacia el mismo lado:
VelocidadActual = 0.99*VelocidadActual+0.01*VelocidadNatural

¿Y acá qué pongo?

Reducción normal: Acá.

Reducción por dar marcha atrás: Acá.

E intento comprender la ecuación.
VelocidadActual se reduce según un número que puedo cambiar.
Y se le suma lo que sería un porcentaje digamos, de VelocidadNatural. ¿Por qué se suma así y no en bruto?

Quizá pueda deducir los Acás.

Reducción normal:
VelocidadActual = 0.99*VelocidadActual

Reducción por dar marcha atrás:
VelocidadActual = 0.99*VelocidadActual-0.01*VelocidadNatural

Voy a probarlo, pasa que no le veo mucho sentido.

18 Junio, 2025, 05:23 pm
Respuesta #6

Abdulai

  • Moderador Global
  • Mensajes: 3,044
  • País: ar
  • Karma: +0/-0
  • Sexo: Masculino
...
Si le pongo 2, frena rapidísimo.
Si le pongo 1.5, cuando va al mismo lado que fue empujado entonces la velocidad no baja hasta la natural. Por ejemplo:
Y...  en el primer caso (2)  el límite de la sucesión es \( Speed \) y en el segundo (1.5) es \( 2Speed \)

Para que siempre el límite sea \( Speed \) , y usando tu notación ,  hacé:  \( Moving = Moving - (Moving-Speed)/k \)
Donde \( k \) puede ir de 1 (desaceleración instantánea) ... a infinito (no frena nunca)
Lo que vaya hacia adelante o atrás no necesita otra ecuación, basta que \( Speed \) tome valores negativos.

Si comparás esto con lo que escribí antes vas a ver que es exactamente lo mismo escrito de otra forma.

Citar
La fórmula que me das parece excesivamente complicada para algo que, como dije, no lo parece tanto.
Si cambiar una suma y división por dos multiplicaciones y una suma te parece excesivamente complicado... no hay nada que se pueda hacer entonces.