Actualmente tengo algo como:
float deltaX = point0.getX() - point1.getX();
float deltaY = point0.getY() - point1.getY();
Y cada 0.01 segundos actualizo la posición de mis objetos de esta manera:
object.setPosition(object.getX()-deltaX/100,object.getY()-deltaY/100);
Entonces esto mueve mi objeto del punto 0 al punto 1 en 1 segundo. Lo que necesito es tener los 2 puntos, para poder mover el objeto desde el punto 0, mirando (en la dirección de) punto 1 con una velocidad constante. Por lo tanto, cuando tengo un punto más cercano a mi punto inicial, el objeto se moverá hacia él con la misma velocidad que si tuviera un punto más alejado. Cualquier sugerencia es apreciada. Gracias.
                    
                        game-mechanics
                                movement
                                
                    
                    
                        Fofole
fuente
                
                fuente

Respuestas:
Usaré algunas estructuras de álgebra lineal, ya que es más fácil describir las operaciones de esa manera. En caso de que no sepa cómo implementar estas operaciones vectoriales, le daré una explicación rápida al final.
Entonces, digamos que comienza con estos valores:
startyendmarca los puntos finales del movimiento,speedes cuántos píxeles debe mover por segundo yelapsedes la velocidad a la que actualizará la posición de su objeto (algunos motores ya le proporcionan ese valor ):Lo primero que querrá calcular es la distancia entre ambos puntos y un vector normalizado que contiene la dirección de principio a fin. Además, debe "ajustar" la posición del objeto al
startpunto. Este paso se realiza solo una vez, al principio:Luego de su método de actualización se pasa el objeto mediante la adición de una multiplicación de
direction,speedyelapseden su posición. Después de eso, para verificar si el movimiento ha terminado, puede ver si la distancia entre el punto inicial y la posición actual del objeto es mayor que la distancia inicial que calculó. Si eso es cierto, ajustamos la posición del objeto al punto final y dejamos de moverlo:Referencia rápida de operaciones vectoriales
Representación
Suma / Resta
Multiplicar por escalar (flotante)
Longitud / distancia
Normalizar
Eso debería ser suficiente para convertir el código anterior en operaciones regulares si no tiene una
Vectorclase disponible para usted.Ejemplo de conversión
fuente
Vector2 start;conviertefloat startX, startY;. Y puede calcular fácilmente la distancia manualmente, como explico al final. Es decirfloat dX = bX - aX; float dY = bY - aY; float distance = Math.sqrt(dx*dx+dy*dy);.Crea un vector y normalízalo. Advertencia, algunos pseudocódigos con números incorrectos por delante:
Esto le dará un vector como:
Ahora normalice el vector y recibirá esto :
Desde aquí es el mismo movimiento que con tu delta.
fuente
Copiado y pegado de mi respuesta a: Obtener puntos en una línea entre dos puntos
En pseudocódigo:
fuente