0
al_draw_rotated_bitmap(playerTux, defaultPlayer1.size / 2, defaultPlayer1.size / 2, 
        defaultPlayer1.pos[0], defaultPlayer1.pos[1], mousePos / mouseSensitivity, 0);
        al_draw_rotated_bitmap(playerTux, defaultPlayer2.size / 2, defaultPlayer2.size / 2, 
        defaultPlayer2.pos[0], defaultPlayer2.pos[1], 0, 0);

この関数は、while ループのループごとに、指定された位置と角度でプレーヤーのビットマップを描画します。キーボードのイベントによって動きが変化し、x 軸でのマウスの動きによってプレーヤーの角度が変化します。mouseSensitivity による除算は無視します (これは内部的な側面です)。マウスを動かすことで、プレーヤーをそれ自体の軸で完全に回転させることが可能であると考えてください。(OBS: 武器の画像はすでにプレイヤーの画像にあるため、武器はプレイヤーと一緒に回転します)。

if (state.buttons & 1) {
            al_draw_rotated_bitmap(pistolFire, defaultPlayer1.size / 8, defaultPlayer1.size / 2, 
            defaultPlayer1.pos[0], defaultPlayer1.pos[1], mousePos / mouseSensitivity, 0); }

ここで、マウスの左ボタンを押すと、武器の端に「火の画像」が表示されます。

これらすべてを考慮して、プレイヤーがマップを移動し (W、A、S、D の各イベントで自身の xPos と yPos を増減)、マップ上に同じ容量を持つ別のプレイヤーがいます。武器を発射するとき (マウスの左ボタンを押すとき)、相手が武器の角度の範囲内にいる場合は、相手を攻撃する必要があります。

質問は次のとおりです。どうすればできますか?

if (state.buttons & 1) {
    detectShotColision(); }

武器の角度と両方のプレイヤーの x と y の位置のみを考慮して、このような関数を作成するにはどうすればよいでしょうか?

4

1 に答える 1

1

atan2() を使用して、プレーヤー間の角度を計算できます。銃が向いている角度に (ある程度の許容範囲内で) 等しい場合、プレイヤーは攻撃を受けています。

プレイヤーの間にヒットを吸収するものがある場合は、銃が発射された方向に一列に並ぶ必要があります。最適化されたソリューションのために 2 つを組み合わせることができる場合があります。

于 2013-03-31T13:31:09.607 に答える