ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

弾幕つくろうぜ!コミュの基本パターンその2

  • mixiチェック
  • このエントリーをはてなブックマークに追加
え〜、また時間が空きましたがw
とりあえず、授業が退屈でしょうがないので、この時間を有意義にするために更新ですw


2回目は「狙い撃ち」です。
とっても簡単ですw

前回の
ang = -90/(180*3.141592f);
の部分を
ang = atan2(狙うものの位置.x - 弾の位置.x, 狙うものの位置.y - 弾の位置.y);
とすればおっけ〜!

簡単でしょう?

とりあえず、一番気をつけなければいけないのは、
atan2()の中に入れる値の順番。
ang = atan2(狙うものの位置.x - 弾の位置.x, 狙うものの位置.y - 弾の位置.y);

ang = atan2(弾の位置.x - 狙うものの位置.x, 弾の位置.y - 狙うものの位置.y);
とすると、逆方向に飛びますので注意を!

まぁ、
ang = atan2(弾の位置.x - 狙うものの位置.x, 弾の位置.y - 狙うものの位置.y)+π;
としてやるといいでしょう。

んで、これを、

弾の設定時にやってあげてください!

でないと・・・
回避不能な超追尾弾に・・・
お、恐ろし〜


今回もソースをば。

#include <math.h>

//円周率を定義
#define PI 3.141592
//構造体定義
typedef struct{
      float x, y; //座標
      float vx, vy; //加速度
      float ang; //角度
}BULLET;

typedef staruct{
float x, y; //座標
float vx, vy; //加速度
}PLAYER;

typedef staruct{
float x, y; //座標
float vx, vy; //加速度
}ENEMY;


void BulletMove{
      //構造体宣言
      BULLET Bullet;
PLAYER player;
ENEMY enemy;

static bool flag = FALSE;

player.x = 100;
player.y = 300;

enemy.x = 100;
enemy.y = 10;

      //座標(0,0)を代入
      Bullet.x = 0;
      Bullet.y = 0;

if(flag == FALSE){
      //角度をラジアンに変換して代入
      ang = atan2(player.x - Bullet.x, player.y - Bullet.y);
flag = TRUE;
}
      //加速度設定
      Bullet.vx = cos(ang);
      Bullet.vy = sin(ang);

      //ループ
      //弾がx座標の10より大きくなる、
      //またはx座標が-10より小さくなる
      //またはy座標の10より大きくなる、
      //またはy座標が-10より小さくなる
      //と、ループを抜ける
      while(Bullet.x < 10 || Bullet.x > -10
      || Bullet.y < 10 || Bullet.y > -10){
      Bullet.x += Bullet.vx;
      Bullet.y += Bullet.vy;
     }
}


というわけで、二回目はこれだけです。

質問はいつでも受け付けますよ〜

追記:
ただいま弾幕解説ようのHPを製作中です。
しばしお待ちを〜

コメント(3)

    _  ∩
  ( ゚∀゚)彡  次は3way!3way!
  (  ⊂彡
   |   |
   し ⌒J
>K.G.さん
わかりましたw
次はnWay弾、(n-1)Way弾の説明をさせていただきますね。
これでもうシューティングは作れたも同然やね(何ヲ

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

弾幕つくろうぜ! 更新情報

弾幕つくろうぜ!のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング