[英]C# Pathing algorithm for moving a object from point(X, Y) to point(X, Y)
[英]C# Pathing algorithm for moving a object from point(X, Y) to point(X, Y)
給定一個對象,它可以在給定的X,Y點處向前,向后,向左和向右移動。 如何使用給定的運動機制以最有效,最自然的方式將對象有效地指向X,Y點。
該對象可實時移動,您可以告訴它們“ startMoving | Direction |()”和“ stopMoving | Direction |()”。 盡管作為一種額外的扭曲,而我遇到的麻煩是,物體的朝向永遠是未知的,但僅知道其當前位置,因此算法必須“檢測”方向。 對象的位置以500-1秒的間隔在單獨的線程中更新。 可以在任何時候發出“請求”以更新算法中的位置,但是它不是立即可用的,算法必須考慮到這一點。 像requestAndWaitForCoordUpdate()這樣的事情是完全可以接受的,但是可能不需要。
此外,沒有障礙物出現,可以假設您在最敞開的平面上,遠離路徑之間的直線直線,可能會遇到障礙物。 可以安全地假設,目標和源之間的距離的1/4應為給定直接路徑上的寬度。
我還要提到的是,我不確定A *是否適用於這種情況,如果確實存在不確定性,我不確定如何實現它。 這里唯一的實際變量是對象的朝向。
這是一些示例代碼:
public int[] currentCoords;
public void movement() {
currentCoords[0] = 1005; // starting y coord
currentCoords[1] = 1007; // starting x coord
moveTo(1050, 1025);
}
public void moveTo(int x, int y) {
... how?
}
public void threadUpdatingCoords() {
... periodically check for source coord updates
... between 200ms and 1000ms apart.
}
要計算最佳路線,您應該使用A *算法。 但是,要以最人性化的方式進行操作,您只需讓它行走並隨機走動即可。 除非它是一個聰明的人,否則他只會將右手貼在牆上並繼續行走而不會失去接觸:最終您將到達目的地。
人類不是有效的,而是隨機的。 A *不是隨機的,而是有效的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.