2016-05-11 4 views
-2

PlayerとObjectと呼ばれるObjectを作成しました.Zombieというオブジェクトを作成しました。Playerの射撃機能を追加したいと思います。私がマウスを持っているところで、どうやってこれを達成することができますか?C++ SDLポイントaからbまでのベクトルを作成する方法

+0

カーソルとプレーヤーとのピクセル距離を計算します。弾丸の経路の適切な勾配を決定し、任意の速度を選ぶ。箇条書きを特定の 'x'を下に移動し、特定の' y'を下に移動します(y/xは勾配と一致する必要があります)。私はあなたが線形経路だけを気にしていると仮定しています。 – Charles

答えて

0

おかげさまで、私はatan2を使って解決しましたが、角度を計算しました。私が角度を持っていたとき、私はちょうどx変数にスピード* cos(角度)の値を加え、y変数にスピード* sin(角度)を加えました。

0

最初に他の方向を削除して、方向が左から右に向いていることを想像してみましょう。 あなたはまず、これはplaceXにマウスを置いたのx位置とにマウスを置いたのY位置placeYをプッシュ

SDL_GetMouseState(int* placeX, int* placeY) 

を使用することにより可能であるマウスの位置を取得する必要があります。

これで、プレイヤーの位置を取得する必要がありました。これは、ループ中にプレーヤーのテクスチャの矩形を取得することで実行できます。 だから文字が

(x、y)は(0,10)である場合

(40、20)(H、W)

あなたはその文字の右半分にある弾丸を持っています。それで

になります

(20、20)

、実際の電流弾丸源(x、y)は

である - >(20、30)(基本的にrect.x + bulletsource.x and rect.y + bulletsource.y)。

今あなたがしなければならないすべては

if(bullet.x < placeX)//this makes it look like the bullet is moving to the right 
{ 
bullet.x++ //this moves the bullet closer to the right 
Redraw bullet //you have to redraw to see the changes 
} 

のようなものがyに対して同じことを行う場合、それは本当に、if文である必要はありません。

複数の弾丸指示がある場合も同じロジックが適用されます。

弾丸のソースをx軸とy軸の中心として考えるだけで、特定の象限(対角線)または軸の線(直線の弾丸)の近くにマウスがあるかどうかを確認する必要があります。

マウスがある象限または線を知ったら、使用するテクスチャを変更します(北東向きの斜めの弾丸または北向きの単純な弾丸)。

+0

ありがとう!しかし、それは実際には45度しか適用されませんか?私が何かを撮影しようとしているのであれば、プレイヤーに対して12度と言いましょう。場所が正しくなるまで弾丸が45度だけ上がらないでしょうか? – styphNate

+0

コードを変更して、12度以上の位置に斜めにシームレスに移動させることができます。あなたはそれでいくつかの数学が必要になります:)。 – kdyz

関連する問題