0

kbhit を if ステートメントで使用すると、作成中のゲームで奇妙な遅延反応が発生します。ただし、switch ステートメントを使用している場合、この同じ遅延の問題は発生しません。IF と switch の両方のコードを次に示します。

以下のこのコードは、キャラクターを動かそうとするとラグが発生します。キャラクターを動かすには、ボタンを 2 回押す必要があります。

void PlayerBike()
{
    if (kbhit())
    {
        if ((getch()) == 'w'){PlayerX = PlayerX - 1;}
        else if ((getch()) == 's'){PlayerX = PlayerX +1;}
        else if ((getch()) == 'd'){PlayerY = PlayerY +1;}
        else if ((getch()) == 'a'){PlayerY = PlayerY - 1;}
    }
}

遅延を発生させない switch ステートメント

if (kbhit())
{   
    switch (getch()) 
    {
        case 'w': 
        PlayerX = PlayerX - 1;
        break;

        case 's':
        PlayerX = PlayerX + 1;
        break;

        case 'd':
        PlayerY = PlayerY + 1;
        break;

        case 'a':
        PlayerY = PlayerY - 1;
        break;
    }
}

見た目がすっきりするので、ifステートメントをより適切に使用したいと思います。

4

3 に答える 3

3

あなたのifコードはgetch複数回呼び出しますが、これはあなたが望むものではありません。

于 2013-11-14T21:06:40.083 に答える