如何检查(在运行时)用户是否包含文件
How to check (during runtime) if the user included a file
我正在SDL中编写一个用于游戏编程的小库。该库负责游戏循环、键盘和鼠标输入。我已经将库分离为3个小文件:
- /游戏库.h
- /输入/键盘.h
- /输入/鼠标.h
现在,在主游戏循环中,我检查SDL_Quit事件(这样我就可以提供一个默认关闭的窗口),以及键盘和鼠标事件。Keyboard和Mouse类是静态类,可以随时访问以获得Keyboard/Mouse状态(就像XNA一样)。我写的键盘类如下:
#ifndef KEYBOARD_INPUT
#define KEYBOARD_INPUT
#include <set>
namespace DGL
{
struct KeyboardState {
std::set<Uint8> keys;
bool isKeyDown(Uint8 key)
{
return keys.find(key) != keys.end();
}
bool isKeyUp(Uint8 key)
{
return !isKeyDown(key);
}
};
class Keyboard {
/**
* This class handles keyboard input game-like
*/
private:
static std::queue<SDL_Event> events;
public:
void insertEvent(SDL_Event event)
{
events.push(event);
}
void eraseEvents()
{
std::queue<SDL_Event> empty;
swap(events, empty);
}
static KeyboardState getKeyBoardState()
{
KeyboardState state;
while ( !Keyboard::events.empty() )
{
SDL_Event event = events.front();
Keyboard::events.pop();
state.keys.insert(event.key.keysym.sym);
}
return state;
}
};
std::queue<SDL_Event> Keyboard::events;
}
#endif
正如您所看到的,用户可以使用方法Keyboard::getKeyboardState()
来获得具有键盘当前状态的结构。像这样:
...
...
KeyboardState state = Keyboard::getKeyboardState()
if ( state.isKeyDown(SDLK_w) )
{
....
}
....
当事件不是SDL_Quit而是SDL_KEYDOWN时,使用"events"静态std::队列中的事件填充结构,该队列从游戏循环中接收其值。
我想找到一种方法来调用Keyboard::insertEvent()
(从游戏循环),前提是用户包含库本身(Keyboard.h)。
正如您所看到的,我试图使用include保护来解决我的问题,但它在运行时不起作用。
我希望我正确地解释了我的问题。顺致敬意,
include保护是关键:
#ifdef KEYBOARD_INPUT
DGL::Keyboard kbd;
#endif
...
#ifdef KEYBOARD_INPUT
kbd.insertEvent(...);
#endif
相关文章:
- C++LDAP检查用户是否是特定组的成员
- 如何检查用户是否输入了元音字符?
- 检查用户是否是 Windows 中本地计算机上的管理员C++
- 如何检查用户是否已打开应用程序
- 如何检查用户是否没有输入任何字符串
- 如何检测用户是否进入空格栏
- 检查用户是否在数组中键入辅音
- C 检测用户是否输入字符串而不是INT
- 如何检查用户是否输入了整数
- 如何检查(在运行时)用户是否包含文件
- 如何在Windows7中检查用户是否为管理员
- 如何检查用户是否键入了"yes"字符串
- 如何检查用户是否输入了有效值
- 检查用户是否在倒计时结束前完成了键入
- 如何检查用户是否进行了两次相同的选择
- 如何检查用户是否按下了编辑控件内的键
- 如何确定用户是否已知,是否使用pam_authenticate
- Windows 通用 - 如何检查用户是否已登录到Microsoft帐户
- 如何使用 C++ 桌面应用程序检查用户是否在线
- 请查明用户是否更改了QSpinBox