Sau khi nhận được một bài giảng toán học, nó quay ra rằng điều này rất dễ dàng để giải quyết. Đầu tiên, chúng ta cần lấy góc mà mục tiêu sẽ di chuyển.
float deltaX = targetX - startX;
float deltaY = targetY - startY;
float angle = Math.atan2(deltaY, deltaX);
startX/Y có thể là hiện tại X/Y.
Bây giờ chúng ta đã tính toán góc, chúng ta có thể áp dụng nó vào các tọa độ hiện tại:
currentX += speed * Math.cos(angle);//Using cos
currentY += speed * Math.sin(angle);//or sin
để xử lý các tính toán bao nhiêu X và Y sẽ được tăng thêm. Sử dụng tốc độ làm biến tùy chỉnh nếu bạn cũng cần có tốc độ tùy chỉnh. Nếu bạn không cần tốc độ cao hơn, hãy xóa biến.
Và để di chuyển các đối tượng, áp dụng X/Y để các đối tượng:
c.drawBitmap(bm, x, y, null);
Ví dụ:
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);
(...)
}
Mục tiêu ở đây là để làm cho nó di chuyển theo một đường thẳng từ vị trí hiện tại đến vị trí đích. Nhìn nó như băng qua một ô vuông. Đó là một hành vi trò chơi và có thể không có bất kỳ bổ trợ hoặc tiện ích nào – Zoe
Những gì tôi đang cố gắng nói là câu trả lời này quan tâm đến vật lý liên quan đến chuyển động, nhưng không phải cách thực hiện điều này theo nghĩa điều hướng tự động trên canvas. – Zoe
Tôi vẫn cố hiểu) Ví dụ, sử dụng phương thức từ View.java - setTranslationX (float x), lấy tọa độ và chỉ vẽ lại bằng Canvas. Bạn muốn triển khai vẽ Canvas dựa trên vị trí? – GensaGames