セミオート/フルオート連射の実装

を何となく書いてみる。

先ずはフルオート

// FLUU AUTO
{
  const int INTERVAL = 5; // shotの間隔(フレーム)
  static int shot_time = INTERVAL;

  if( IsPressKey() && ++shot_time > INTERVAL )  // shotボタン押下でIsPressKey()がtrueになると思いねえ
  {
    shot(); // これで弾を撃つと思いねえ
    shot_time = 0;
  }
}

こんな感じか。shot_timeがINT_MAX超えると悲しいことになりそうだが気にしない。ワンステージ2147483647フレーム到達するゲームとか作ってるんじゃねええええ

で、セミオート+押しっぱでオートにする場合は、ボタンに慣性みたいな処理を入れる。

// SEMI AUTO
{
  const int INTERVAL = 5; // shotの間隔(フレーム)
  const int KANSEI = 20; // 20フレ毎にボタンを押してればフルオートになる
  static int shot_time = INTERVAL;
  static int button_time = KANSEI;

  if( IsPressKey() ) // shotボタン押下でIsPressKey()がtrueになると思いねえ
  {
    button_time = 0;
  }

  if( button_time++ < KANSEI && ++shot_time > INTERVAL )
  {
    shot(); // これで弾を撃つと思いねえ
    shot_time = 0;
  }
}

こんなもんかな。脳内妄想なんで、バグあったら教えてくださいw。ていうか、この程度のことは、シューティングゲームアルゴリズムマニアックスに載ってそうな気がする。今度買ってみよう。買ってからだとパクリ記事になっちゃうので、今書いておくwwwまあ、もしかしたらもっと良い手がるかもしれんしね。