Dopo aver ottenuto una lezione di matematica, si scopre che questo è facile da risolvere. Per prima cosa, dobbiamo ottenere l'angolo su cui si muoverà il bersaglio.
float deltaX = targetX - startX;
float deltaY = targetY - startY;
float angle = Math.atan2(deltaY, deltaX);
startX/Y può essere corrente X/Y.
Ora che abbiamo calcolato l'angolo, possiamo applicare alle coordinate attuali:
currentX += speed * Math.cos(angle);//Using cos
currentY += speed * Math.sin(angle);//or sin
per gestire i calcoli di quante X e Y sarà aumentato di. Utilizzare la velocità come variabile personalizzata se è necessario avere anche un set di velocità personalizzato. Se non hai bisogno di più velocità, rimuovi la variabile.
E per spostare l'oggetto, applicare X/Y per l'oggetto:
c.drawBitmap(bm, x, y, null);
Esempio:
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);
(...)
}
L'obiettivo qui è quello di farlo muovere in linea retta dalla posizione corrente a una posizione target. Guardalo come attraversare una piazza di fronte. È un comportamento di gioco ed è possibile senza plug-in o componenti aggiuntivi – Zoe
Quello che sto cercando di dire è che questa risposta si prende cura della fisica relativa al movimento, ma non di come farlo nel senso della navigazione automatica su tela. – Zoe
Sto ancora cercando di capire) Ad esempio, usando il metodo di View.java - setTranslationX (float x), prende le coordinate e si ridisegna semplicemente usando Canvas. Vuoi implementare il disegno Canvas in base alla posizione? – GensaGames