非常にうまく機能するイベント ハンドラー メカニズムを作成しました。そこで、より一般化するように拡張し、キーボードの状態を取得するイベント ハンドラーを作成しました。
class KeybdHandler : public EventHandler<KeybdHandler>
{
private:
Keyboard _keybd;
public:
void SetEvent( const Keyboard::KeyEvent & evt )
{
Keyboard::KeyEvent e = evt;
// event holds the new keystate
Notify(&e);
// keystate is saved to keyboard
_keybd.SetKey(e._Key, e._bKeyDown);
}
Keyboard & GetKeybd() { return _keybd; }
};
static KeybdHandler g_evtKeybd;
KeybdHandler::Keyboard 変数は、キーボードの状態を示す配列を保持します (たとえば、キーごとに 1 つのエントリと、キーダウンまたはキーアップを示す bool 変数)。
そこで、この KeybdHandler クラスの静的インスタンスを作成します。
しかし、g_evtKeybd.GetKeybd() を呼び出すと、キーボードの状態は常に空/空白/すべてキーアップ状態です。
KeybdHandler::Keyboard 変数を静的にすると、GetKeybd() は状態が保存された Keyboard オブジェクトを返します。
含まれているオブジェクトが静的である場合、キーボード変数を静的にする必要があるのはなぜですか?
編集: SetEvent が常に静的変数を介して呼び出されることを明確にしたいだけです:
g_evtKeybd.SetEvent( Keyboard::KeyEvent((int)key, true));
EDIT2:関連性があるかどうかはわかりません。KeybdHandler クラスは静的ライブラリにあり、別の実行可能ファイルからリンクされています。