일부 단위 테스트 방법을 쓰려고합니다. 키를 눌렀거나 놓았는지 확인하는 메서드를 테스트하고 싶습니다. 그리고 내 질문은 다음과 같습니다.SFML/C++ 사용자 입력 시뮬레이션
C++의 SFML에서는 키보드의 임의 키 누르기를 시뮬레이션 할 수 있습니까?
아니면이 작품이 자신을 신뢰해야합니까?
일부 단위 테스트 방법을 쓰려고합니다. 키를 눌렀거나 놓았는지 확인하는 메서드를 테스트하고 싶습니다. 그리고 내 질문은 다음과 같습니다.SFML/C++ 사용자 입력 시뮬레이션
C++의 SFML에서는 키보드의 임의 키 누르기를 시뮬레이션 할 수 있습니까?
아니면이 작품이 자신을 신뢰해야합니까?
내부 구조에없는, 그러나 당신이 찾고 있다면 시뮬레이션 및 KeyPressed 또는의 keyReleased 이벤트 내가 다음과 같은 작업을해야 확실 해요 당신에게 내 자신의 코드의 원인을 제공 :
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));
지금 테스트 할 수 없습니다 ... 작동한다면 다른 이벤트와 유사한 기능을 수행 할 수 있어야합니다.
당신이 방금 내 문제를 해결했다고 생각합니다 .D 감사합니다, 정말로 도움이됩니다. :) –
@JakubStasiak 듣기 좋았습니다! 나는 그것이 올바른 코드를 가져 가라. 행운을 빈다. – Conduit
직접 키 관리자를 사용할 수 있습니다. SDL (그러나 SFML와 C++에서의 동일, 변경 단지 몇 명)와 C의 예 : C++ SFML의 키 매니저를 찾았 :
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;
}
편집 https://github.com/dabbertorres/SwiftInputManager
은 할 수 없습니다 코드가 시뮬레이션을 어렵게 만들 것 sf::Keyboard::isKeyPressed
의 영어
내가 투표하려면 무엇을 알아야할까요? –
누군가가 질문을 너무 광범위하게 생각하기 때문에 투표했습니다.하지만 여기서는 그렇지 않습니다. 특정 도서관에 대해 묻고 있습니다. – coyotte508
귀하의 질문에 관해서는 http://en.sfml-dev.org/forums/index.php?topic=14611.0 일부 답변 (전 세계를 시뮬레이션 할 수 없음) – coyotte508