1

ボールの動きを流体のような動きで動かそうとしています。上キー、下キー、左キー、または右キーを押したときに、1単位上に移動せず、停止してから移動し続けるようにするにはどうすればよいですか。また、キーを放すときに別の方向を停止することなく、同時に2方向に移動させるにはどうすればよいですか? ありがとう

if(GetAsyncKeyState(VK_UP))
{
    if(g_nGameState == SETTINGUPSHOT_GAMESTATE || g_nGameState == INITIAL_GAMESTATE)
    {
        g_cObjectWorld.AdjustCueBallY(MOVEDELTA);
        g_cObjectWorld.ResetImpulseVector();
    }
}

if(GetAsyncKeyState(VK_DOWN))
{
    if(g_nGameState == SETTINGUPSHOT_GAMESTATE || g_nGameState == INITIAL_GAMESTATE)
    {
        g_cObjectWorld.AdjustCueBallY(-MOVEDELTA);
        g_cObjectWorld.ResetImpulseVector();
    }
}

if(GetAsyncKeyState(VK_LEFT))
{
    if(g_nGameState == SETTINGUPSHOT_GAMESTATE || g_nGameState == INITIAL_GAMESTATE)
    {
        g_cObjectWorld.AdjustCueBallX(-MOVEDELTA);
        g_cObjectWorld.ResetImpulseVector();
    }
}

if(GetAsyncKeyState(VK_RIGHT))
{
    if(g_nGameState == SETTINGUPSHOT_GAMESTATE || g_nGameState == INITIAL_GAMESTATE)
    {
        g_cObjectWorld.AdjustCueBallX(MOVEDELTA);
        g_cObjectWorld.ResetImpulseVector();
    }
}
4

2 に答える 2

1

次のようなことができます。

SetTimer を使用して、ウィンドウ イベント ループにタイマーを作成します。10 ミリ秒間隔が必要な場合に適しています。ウィンドウ スレッド上になければならない理由は、GetAsyncKeyState が別のスレッドから呼び出された場合、目的の結果が得られないためです。GetAsyncKeyState の呼び出しはキー処理イベントとは別のメッセージで行う必要があるため、タイマーを使用して、キーがまだキューにあるようにします。

タイマー機能内で、次のようなことができます

int deltaX = 0, deltaY = 0;

unsigned int downDown = GetAsyncKeyState(VK_DOWN);
unsigned int upDown = GetAsyncKeyState(VK_UP);
unsigned int leftDown = GetAsyncKeyState(VK_LEFT);
unsigned int rightDown = GetAsyncKeyState(VK_RIGHT);

if(downDown & 0x00008000)deltaY -= MOVEDELTA;
if(upDown & 0x00008000)deltaY += MOVEDELTA;
if(leftDown & 0x00008000)deltaX -= MOVEDELTA;
if(rightDown & 0x00008000)deltaX += MOVEDELTA;

g_cObjectWorld.AdjustCueBallX(deltaX);
g_cObjectWorld.AdjustCueBallY(deltaY);
g_cObjectWorld.ResetImpulseVector();

このようにして、移動がキーアップで停止することを確認することもできます (deltaX == 0 && deltaY == 0) AdjustCueBall(X|Y) のセマンティクスが何であるかはわかりませんが、それらが移動を停止することを確認した場合彼らが0になると、その方向はうまくいくはずです。

また、2 つのキーを使用して斜めに移動できるようにするには、キーボードがハードウェアで複数のキーを押すことをサポートしている必要があることに注意してください。 4 つの基本的な方向の。

于 2012-09-30T23:22:56.997 に答える
0

1 つの設計は、方向 を変更するためだけにキーボードを使用することです。

方向を変えるキープレスを受信するまで、ボールを現在の方向に動かし続けます。これにより、プロセッサの負荷がキープレスによって継続的に中断されることから軽減されます。

非直交方向への移動に関しては、より多くのキーを使用します。「キーパッド」を見てください。一部のキーは「5」キーから斜めになっています。それらを使用します。

于 2012-09-27T23:31:02.997 に答える