2011-01-31 15 views
0

私は完全にこの1つを困惑しています。私は開発しているゲームにC++とSFML 1.6を使用していますが、私は血まみれのアイデアはありません。弾丸(弾丸など)を作るにはどうすればいいですか?私はそれを理解していない。それは私の睡眠不足かもしれないが、私は知らない。どのように投射物を作るのですか?

私の質問は、マウスがどこにあるかに基づいて明確な方向に移動するスプライトを作成する方法です。 (トップダウンマウスが目指すとシューターを考える)

答えて

2

最も簡単な解決策: Dxを= Sxの:マウスは、MX、私にあり、船がSxのであれば は、Syが、マウスへの船からの方向を計算します

DLen=sqrt(Dx*Dx + Dy*Dy) 
Dx/=DLen; 
Dy/=DLen; 

今Dxはあなたがx軸上の弾丸を移動する距離です。-Mx DyがSY-マイ

今Dは(これは1であることの長さとなるようにスケールを意味します)正規化=弾丸の速度を1にするために。

あなたがそう(弾丸の位置:BX、箇条書きのことで速度:[ミリ秒あたりのピクセル数]旅館フレーム時間フォート[ミリ秒で])のような弾丸移動このように、各フレーム

Bx=Bx+Dx*Bs*Ft 
By=By+Dy*Bs*Ft 

これは、ことをあなたに弾丸を与えるをゲームのマウスまたはフレームレートの方向に依存しない速度でマウス位置に向かって移動する。

EDIT:@MSaltersは、マウスがそれを行うには

+1

、とき 'のMx == Sxの&&マイ== Sy'、あなたは撃つぞ:私はここに、私は非常によくこれを説明し、その回転からスプライトの動きを作るためのコードを考えていません足に自分自身。 – MSalters

+0

@MSalters良い点 - 編集 – Elemental

+0

これは意味がありますが、Arrrrghghhhです。数学しかし、ありがとう。 – Lemmons

0

一つの方法は作ることですノーマライズ上のゼロ除算エラーを回避するために、直接、船の上にあるときDLEN == 0の場合に確認する必要が言うように弾丸はマウスに向いていて、三角法を使ってx軸とy軸を横切って動かし、角度からのhypotinuseを見つけます。

もちろん
void sMove(sf::Sprite& input,float toMove, int rotation){ 
bool negY = false; 
bool negX = false; 
int newRot = rotation; 
if (rotation <= 90){ 
    negY = true; 
} 
else if (rotation <= 180){ 
    //newRot -= 90; 
    negY = true; 
} 
else if (rotation <= 360){ 
    newRot -= 270; 
    negY = true; 
    negX = true; 
} 
float y = toMove*cos(newRot*PI/180); 
float x = toMove*sin(newRot*PI/180); 
if (negY){ 
    y = y*-1; 
} 
if (negX){ 
    x = x*-1 
} 
input.move(x, y); 
} 
関連する問題