참고 : API 제한 (SFML)으로 인해 콜백을 수행하기보다는 폴링해야합니다. 또한 '괜찮은'타이틀이없는 것에 대해 사과드립니다.
여기에 두 가지 질문이 있습니다. 수신중인 입력을 등록하는 방법 및 처리 방법
입력 처리
예를 들어, 'A'키를 눌렀다는 사실을 등록한 후 거기에서 수행하는 방법에 대해 이야기하고 있습니다.
전체 키보드 배열을 보았습니다.
bool keyboard[256]; //And each input loop check the state of every key on the keyboard
그러나 이것은 비효율적 인 것 같습니다. 예를 들어, 키 'A'를 '플레이어 왼쪽으로 이동'에 연결했을뿐만 아니라 모든 키를 초당 30-60 회 확인합니다.
그런 다음 원하는 키를 찾은 다른 시스템을 시도했습니다.
std::map< unsigned char, Key> keyMap; //Key stores the keycode, and whether it's been pressed. Then, I declare a load of const unsigned char called 'Quit' or 'PlayerLeft'.
input->BindKey(Keys::PlayerLeft, KeyCode::A); //so now you can check if PlayerLeft, rather than if A.
그러나 이것의 문제는 이제 모든 단일 키를 바인딩하지 않고도 이름을 입력 할 수 없다는 것입니다.
그런 다음 두 번째 문제가 있는데 실제로 다음과 같은 좋은 해결책을 생각할 수 없습니다.
송신 입력
이제 A 키를 눌렀거나 playerLeft가 true라는 것을 알고 있습니다. 하지만 여기서 어떻게 가나 요?
방금 확인하는 것에 대해 생각
if(input->IsKeyDown(Key::PlayerLeft) { player.MoveLeft(); }
했습니다. 입력을 엔터티에 크게 연결하고 다소 지저분합니다. 나는 플레이어가 업데이트 될 때 자신의 움직임을 처리하는 것을 선호합니다. 나는 일종의 이벤트 시스템이 작동 할 수 있다고 생각했지만 그와 함께하는 방법을 모르겠습니다. (이런 종류의 작업에는 신호와 슬롯이 좋다고 들었지만 속도가 매우 느리고 그것이 어떻게 적합한 지 알 수 없습니다).
감사.