我正在尝试编写一些单元测试方法。我想要测试一个检查按键是否被按下或释放的方法。我的问题是:
在C++中,使用SFML能否模拟键盘上的随机按键?
或者我只能相信这个方法本身有效吗?
我正在尝试编写一些单元测试方法。我想要测试一个检查按键是否被按下或释放的方法。我的问题是:
在C++中,使用SFML能否模拟键盘上的随机按键?
或者我只能相信这个方法本身有效吗?
sf::Keyboard::isKeyPressed
的内部实现会使模拟变得困难,但是如果您想要模拟 按键按下 或 释放事件,我相信以下方法应该能够正常工作:const sf::Event simulateKeypress(sf::Keyboard::Key key, bool alt, bool control, bool shift, bool system)
{
sf::Event::KeyEvent data;
data.code = key;
data.alt = alt;
data.control = control;
data.shift = shift;
data.system = system;
sf::Event event;
event.type = sf::Event::KeyPressed;
event.key = data;
return event;
}
//your handler here
handleEvent(simulateKeypress(sf::Keyboard::Key::A, false, false, false, false));
目前我无法进行测试...如果可行的话,那么您应该能够为其他事件创建类似的功能。
typedef struct
{
char key[SDLK_LAST];
int mousex,mousey;
int mousexrel,mouseyrel;
char mousebuttons[8];
char quit;
} Input;
void UpdateEvents(Input* in)
{
SDL_Event event;
while(SDL_PollEvent(&event))
{
switch (event.type)
{
case SDL_KEYDOWN:
in->key[event.key.keysym.sym]=1;
break;
case SDL_KEYUP:
in->key[event.key.keysym.sym]=0;
break;
case SDL_MOUSEMOTION:
in->mousex=event.motion.x;
in->mousey=event.motion.y;
in->mousexrel=event.motion.xrel;
in->mouseyrel=event.motion.yrel;
break;
case SDL_MOUSEBUTTONDOWN:
in->mousebuttons[event.button.button]=1;
break;
case SDL_MOUSEBUTTONUP:
in->mousebuttons[event.button.button]=0;
break;
case SDL_QUIT:
in->quit = 1;
break;
default:
break;
}
}
}
int main()
{
Input in;
memset(&in,0,sizeof(in));
while(!in.key[SDLK_ESCAPE] && !in.quit)
{
UpdateEvents(&in);
if (in.mousebuttons[SDL_BUTTON_LEFT])
{
in.mousebuttons[SDL_BUTTON_LEFT] = 0;
}
if (in.key[SDLK_UP] && in.key[SDLK_LEFT])
{
}
}
return 0;
}
编辑:发现了一个用于C++ SFML的密钥管理器:https://github.com/dabbertorres/SwiftInputManager
无法提供我的代码,因为代码不是英文