Search

2012年6月17日 星期日

瞄準彈

瞄準彈就是由A點到B點移動,只要求得兩點的距離然後將距離除以一個速度就可以得到每次更新移動的距離等份,然後將兩個點的X座標以及Y座標的差帶入atan2(dx,dy)可以求得兩點的角度(C++以及Java的Math Library有相關的函數),所以將X軸加上cos(atan2(dx,dy)) * (distance / speed)而Y軸加上sin(atan2(dx,dy)) * (distance / speed)即可讓子彈從A點移動到B點,但是要注意的是這個公式會是等時的,也就是說假設A點距離B點比C點距離B點遠,但是當A以及C兩點同時朝B點發射子彈,兩個子彈會同時間到達B點,所以A點子彈會比C點發射的快,因為distance遠所以除以speed時的每個Frame的更新等份比較大,所以可以distance限制在例如當距離超過多少時限制在一個最大值,以及要將距離限制一個最小值否則兩點太近會使子彈移動速度太慢,以下DEMO可以看AimBullet類別的Update方法有其移動演算法,以及AimBullet類別的建構式有將distance初始時限制在一個範圍,然後如果將這個演算法改成每次更新時都要重新取得目標的座標,這樣就可以有導彈的效果,不過要記得將取樣次數限制在一定次數,否則這個子彈最後必定會擊中目標。

DEMO

沒有留言:

張貼留言