2016-07-05 57 views
1

下面是以下鏈接,我如何使用觸摸點將子彈移動到目標位置。 (Move a body to the touched position using libgdx and box2dlibgdx - Box2d機體如何檢查子彈位置是否已達到目標位置?

我的問題是,如果子彈體已達到目標位置,我該如何停止子彈體。

我已經嘗試了下面的代碼,它的工作正常。

PIXEL_TO_METER = 1/32.0f 
time step = 1/45.0f, velocity iteration = 6, position iteration = 2 
float distanceTravelled = targetDirection.dst(bulletPosition); 
if(distanceTravelled >= MAX_DISTANCE){ 
    // stop 
} else { 
    // move body 
} 

但我想停止在目標位置上的子彈,也不在MAX_DISTANCE上。但我不知道該怎麼做。

回答

1

您需要檢查子彈是否爲附近您的目標足以說明它已達到目標。

float distance = targetPosition.dst(bulletPosition); 
    if(distance <= DEFINED_PRECISION){ 
     // stop 
     // also you can set the target's position to the bullet here 
    } else { 
     // move body 
    } 

爲什麼附近沒有正好在點?子彈正在以一定的速度進行,比如說說每秒10px。如果您有60fps,這意味着在每個幀中子彈正在被移動10/60px

如果子彈開始0位置它的下一個位置(在下一幀)將

1/6 (frame 1) 
2/6 (frame 2) 
3/6 (frame 3) 
... 

如果目標是在該位置1.5/6你可以看到,雖然在frame 1子彈還沒有達到目標但在下一個框架它已通過它,它就像從未檢測到碰撞。這就是爲什麼你需要定義一些精度。它的值應該是在這種情況下1幀步所以至少這將是答案1/6

float DEFINED_PRECISION = 1/6f; 
+0

您好感謝,所以如果我使用1/45.0f時間步長。 defined_precision值是多少? – ronscript

+0

也添加了問題,在你的例子中你使用的是targetPosition而不是targetDistnce。糾正我,如果我的錯誤是targetPosition已經正常化? – ronscript

+0

目標位置是目標的位置(矢量),而不是子彈將要前進的方向 - 正確化位置的原因是什麼? –