4

私は一般的な問題を抱えていると思います。

私は現在 C++ と SDL 2.0 を学んでいます。SDL は、すべてのキーステートを含む const uint * へのポインタを返す関数を提供します。

使用したい変数は次のとおりです。

const Uint8* oldKeyState;
const Uint8* currentKeyState;

私のinput.cppの構築では:

currentKeyState = SDL_GetKeyboardState(&this->length);
    oldKeyState =  currentKeyState;

そして、私が使用する Update() メソッドで:

oldKeyState = currentKeyState;
currentKeyState = SDL_GetKeyboardState(NULL);

ただし、最後の値をコピーする代わりに、現在のキーステートを指す oldKeyState へのポインターを渡すだけです。

では、変数のポインターから現在および古いキーステートに実際の値をコピーするにはどうすればよいでしょうか? 以前の状態が UP で、新しい状態が DOWN であるかどうかを確認できないため、古いキーステートにポインターは必要ありません。

4

4 に答える 4

1

ここでの問題は、ポインターを変更されない const 配列にコピーしようとしていることです。その結果、両方のポインタが同じメモリ アドレスに移動し、押されたキーをチェックできる入力状態の 2 つのコピーが存在しないことがわかります。

代わりに、memcpy を使用して 1 つの配列を別の配列にコピーする必要があります。ただし、これを行うには、oldKeyState の型を just に変更する必要があります。Uint8*そうしないと、const 配列へのコピーでエラーが発生します。

したがって、コードは次のようになります。

const Uint8 * currentKeyState;
Uint8 * oldKeyState;

...

//Constructor
currentKeyState = SDL_GetKeyboardState(&this->length);
oldKeyState = new Uint8[this->length];

...

//Input update
memcpy(oldKeyState, currentKeyState, this->length);
SDL_PumpEvents(); //Copy the array before calling PumpEvents()!
currentKeyState = SDL_GetKeyboardState(NULL);
于 2013-12-02T17:58:27.323 に答える