C#将点(X,Y)移动到点(X,Y)的路径算法
问题描述:
给定一个可以在给定的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.
}
答
要计算你应该使用A *算法的最佳路线。然而,要以最人性化的方式来做到这一点,你只需让它走路并随意指示。除非它是一个聪明的人,否则他只需将右手伸向墙壁并继续行走而不会失去触觉:最终你会到达目的地。
人是不高效的,它是随机的。 A *不是随机的,而是有效的。
你可能有更好的运气(或甚至答案):http://gamedev.stackexchange.com/ – 2011-03-21 21:16:55
请更精确。你想如何移动? – SLaks 2011-03-21 21:19:19
你如何移动?它是向前迈进了吗?或者按照给定的方向迈进?方向如何处理?你只能面对NSEW吗?或者对角线也是一个因素? – 2011-03-22 14:12:51