給定一個可以在給定的X,Y點向前,向後,向左和向右移動的對象。如何有效地使用給定的運動機制以最有效和最人性的方式將對象引導至X,Y點。C#將點(X,Y)移動到點(X,Y)的路徑算法
對象可以實時移動,您可以告訴他們「startMoving | Direction |()」和「stopMoving | Direction |()」。雖然作爲一個額外的扭曲和我遇到的困難的部分是,對象的面對是永遠不知道的,只有它的當前位置是已知的,所以算法必須「檢測」方向。對象的位置以500-1秒的間隔在單獨的線程中更新。用於更新算法內的位置的「請求」可以在任何時候進行,但是它不是立即可用的,算法必須考慮到這一點。做像requestAndWaitForCoordUpdate()這樣的事情是完全可以接受的,但可能不需要。
另外,沒有障礙物出現,可以認爲你是在一個大部分開放的平面上,遠離路徑之間的直線,你可能遇到障礙物。假設目標和源之間的距離的四分之一應在給定的直接路徑上寬度可用,這是安全的。
我還會提到我不確定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.
}
你可能有更好的運氣(或甚至答案):http://gamedev.stackexchange.com/ – 2011-03-21 21:16:55
請更精確。你想如何移動? – SLaks 2011-03-21 21:19:19
你如何移動?它是向前邁進了嗎?或者按照給定的方向邁進?方向如何處理?你只能面對NSEW嗎?或者對角線也是一個因素? – 2011-03-22 14:12:51