第7章 キー操作を制御する

7−5 キーを押すたびに弾を撃つには?

シューティング・ゲームの場合、ボタンを押しっぱなしだと連射だが弾の間隔が長く、連打すると、連射よりも早い間隔で弾が出るように作られているものが多い。これをプログラムで実現するにはどうすればよいだろうか?

答えは単純で、スペースキーを離したときに、ショット発射後経過時間を0にしてやればよい。Game.cppのCharMove関数を次のように修正する。

//-----------------------------------------------------------------------------
// 関数名 : CharMove()
// 機能概要: キャラクタ移動処理
//-----------------------------------------------------------------------------
static void CharMove(void)
{
  ・
  ・
  ・
    /* 自ショットの発射 */
    if (!(KeyTbl[VK_SPACE] & 0x80))
        MyChar.ShotTime = 0;
    else if ( nowTickCount - MyChar.ShotTime >= SHOT_TIME )
    {
        MyChar.ShotTime = nowTickCount;
    ・
    ・
    ・

※スペースキーを離していたら、以下の処理をする必要がないのでelseをつけていることに注意!!

確認

上記の修正を行い、スペースキーを連打すると、一定間隔よりも早くショットが撃てることを確認する。分かりやすくするため、0.2秒ではなく0.5秒間隔で連射するように調整すること。

[ 実行結果サンプル ]


[ TOP ]