2017-04-02 11 views
1

私の単純なスクロールシューティングゲームで進行を続けるためには、この機能が必要です。 GetDirection(player_point, MousePosition)VB.NET 1つのポイントから別のポイントへ方向を取得

をそして、この文脈でそれらを使用します:

Public Function GetDirection(origin As Point, target As Point) As Single 
    'do some trigonometry here 
    Return Direction 
End Function 

通常、私は、これらのパラメータを挿入する

blt_point.X += blt_increment_x 
blt_point.Y += blt_increment_y 
:これらの変数は私の弾丸エンティティを移動するために使用することができます今

Dim direction As Single = GetDirection(player_point, MousePosition) 
Dim blt_increment_x As Single = Math.Sin(direction) 
Dim blt_increment_y As Single = Math.Cos(direction) 

私はこのGetDirection()機能のコードです。現在、私はどこから始めたらいいか分からず、常に0を返すように設定しました。私はVB.NETを使用しています。ありがとう! :)思ってそれらのため

は、ここdiep.ioの非常に連想させる私のゲームのスクリーンショット、:) Screenshot

+0

角度を計算しようとしていますか?そうであれば、ちょうど代数のビットを持つピタゴラスです。あなたが小学校の数学の授業で学ぶことのようなものです。私はあなたが努力して、それがうまくいかない場合は何をしたのかを投稿することをお勧めします。 – jmcilhinney

答えて

2

あなたはMath.Atan2メソッドを使用する必要があります。私はVBの開発者ではないが、私はあなたがVBに次の擬似コードに変換することができると思います。

direction = Math.Atan2(target.Y - origin.Y, target.X - origin.X) 

しかし、あなたのコードに見て、あなただけの次の行にMath.SinMath.Cosを使用することに気付いて、全体的なアイデア非常に意味をなさない。移動の方向は、X座標とY座標の違いによって指定されます。あなたが速度を一定にしたい場合、コードは次のようなものになります。

dX = target.X - origin.X 
dY = target.Y - origin.Y 
len = Math.Sqrt(dX*dX + dY*dY) 
blt_increment_x = Speed * dX/len 
blt_increment_y = Speed * dY/len 
+0

素晴らしい作品です、ありがとうございます! – Adam

関連する問題