簡體   English   中英

將對象從點(X,Y)移至點(X,Y)的C#路徑算法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM