Después de conseguir una conferencia de matemáticas, resulta que esto es fácil de resolver. Primero, necesitamos obtener el ángulo al cual se moverá el objetivo.
float deltaX = targetX - startX;
float deltaY = targetY - startY;
float angle = Math.atan2(deltaY, deltaX);
startX/Y puede ser X/Y actual.
Ahora que hemos calculado el ángulo, podemos aplicarlo a las coordenadas actuales:
currentX += speed * Math.cos(angle);//Using cos
currentY += speed * Math.sin(angle);//or sin
para manejar los cálculos de la cantidad de X e Y se incrementarán en. Usar la velocidad como una variable personalizada si necesita tener un conjunto de velocidad personalizado también. Si no necesita más velocidad, elimine la variable.
Y para mover el objeto, aplique X/Y para el objeto:
c.drawBitmap(bm, x, y, null);
Ejemplo:
int speed = 10;
int x, y;
int targetX = 100, targetY = 600;
int startX = 900, startY = 100;
public void render(Canvas c){
super.draw(c);
float deltaX = targetX - startX;
float deltaY = targetY - startY;
float angle = Math.atan2(deltaY, deltaX);
x += speed * Math.cos(angle);//Using cos
y += speed * Math.sin(angle);//or sin
c.drawBitmap(bm, x, y, null);
(...)
}
El objetivo aquí es conseguir que se mueva en línea recta desde la posición actual a una posición objetivo. Míralo cruzar un cuadrado al otro lado. Es un comportamiento del juego y es posible sin complementos o complementos – Zoe
Lo que trato de decir es que esta respuesta se ocupa de la física relacionada con el movimiento, pero no de cómo hacerlo en el sentido de una navegación automática sobre el lienzo. – Zoe
Todavía intento entender) Por ejemplo, al usar el método de View.java - setTranslationX (float x), toma las coordenadas y simplemente vuelve a dibujar usando Canvas. ¿Desea implementar el lienzo de dibujo según la posición? – GensaGames