저는 XNA 게임을하고 있는데 문제가 생겼습니다. 게임에서 키를 누를 때마다 키 누름으로 트리거되는 메서드가 여러 번 호출됩니다. 예를 들어 사용자가 공격 버튼 (공백)을 누르면 한 번의 키 누름으로 10 번 공격합니다. 키를 눌러 메서드를 한 번만 트리거하면됩니다. 사용자가 키를 누르고있는 경우에도 일부 메서드는 한 번만 호출되기를 원합니다. 지금은 각 버튼을 눌렀을 때마다 thread.sleep을 작성하여 해결했지만 매우 불충분 해 보입니다. 내 문제가 이해되기를 바랍니다. 미리 감사드립니다!단추 누르기 방식을 여러 번 호출합니다.
1
A
답변
5
키 입력시 버튼에 플래그를 지정하고 키 업 해제하지 않은 상태로 플래그를 지정해야합니다. keydown 메소드 중 ... 버튼이 이미 내려져 있는지 확인하십시오. 키가있을 때까지 아무 일도하지 않습니다.
키 누름 중에 응용 프로그램/게임/메시지 대기열을 통해 초당 수천 메시지를받는 모든 것입니다. 스페이스 바 슈퍼를 빠르게 공격하더라도 메시지 대기열을 통해 ~ 50 개의 WM_KEYDOWN 메시지가 처리됩니다.
예 :
bool SpacebarPressed = false;
private void KeyDown() {
if (!SpacebarPressed) {
SpacebarPressed = true;
DoSomethingWithSpacebarBeingPressed();
}
}
private void KeyUp() {
if (SpacebarPressed) SpacebarPressed = false;
}
0
당신은 키가 처음 눌렀을 때 설정 한 후 키를 놓을 때 다시 플래그가 필요합니다. 대략적인 예 :
if(keyIsPressed() && !myFlag)
{
//do stuff
myFlag = true;
}
else if(!keyIsPressed())
myFlag = false;
2
이 답변을 알고 있지만이 방법을 사용할 수 있습니다. 현재의 뒤에 oldKeyBoardState 하나 개의 프레임을 갖는, 뒤에 하나를 설정하는 IsKeyToggled(Keys.Space)
bool IsKeyToggled(Keys key)
{
if (!oldKeyBoardState.IsKeyDown(key) && keyboardState.IsKeyDown(key))
return true;
else
return false;
}
사용하고, 당신이 개 전역 변수가 필요합니다.
public static KeyboardState keyboardState;
public static KeyboardState oldKeyBoardState;
귀하의 Update()
방법은 다음과 같아야합니다
protected override void Update(GameTime gameTime)
{
keyboardState = Keyboard.GetState();
//TODO: Add update logic here
//This comes last
oldKeyBoardState = keyboardState;
}
관련 문제
- 1. 여러 단추 누르기 방지
- 2. ListView.setSelection이 getView를 여러 번 호출합니다.
- 3. Overlay.draw()를 여러 번 호출합니다.
- 4. 코드 뒤에서 SetBinding을 여러 번 호출합니다.
- 5. 검색 차단 단추 누르기
- 6. 복수 단추 누르기
- 7. 헤드셋 감지 단추 누르기
- 8. 제출 단추 누르기 편집기 격자 패널에서 레코드가 두 번 지워집니다.
- 9. 길게 누르기 단추 이벤트 처리기
- 10. UITableViewCell의 두 번 누르기
- 11. UIButton에서 두 번 누르기
- 12. 단추 누르기 직후 키보드 닫기
- 13. GWT 단추 롱 마우스 누르기
- 14. 단추 누르기 기록을 사용하여 UITableView를 만드는 방법
- 15. 화면 전환 중에 여러 개의 단추 누르기 방지 XNA WP7
- 16. webview에서 두 번 누르기 링크
- 17. GestureOverlayView 및 두 번 누르기
- 18. 맞춤 시간이있는 두 번 누르기
- 19. JavaScript 상응하는 브라우저 새로 고침 단추 누르기
- 20. 입력하는 동안 UINavigationController 뒤로 단추 누르기
- 21. C# 웹 브라우저 시뮬레이션 단추 누르기
- 22. 계산 단추 누르기 - 데이타베이스에서 비율을 찾아 내기
- 23. TinyMCE 사용자 지정 단추 누르기 질문
- 24. 전원 단추 누르기 - 화면 계속 유지
- 25. UITapGestureRecognizer를 사용하여 키보드 재정의 단추 누르기
- 26. SQL 호출을 여러 번 반복하여 호출합니다. 포스트 그레스 8.3
- 27. 동적으로 추가 된 내용을 여러 번 유효성 검사기에서 호출합니다.
- 28. 파이썬 : 스레드를 사용하여 서브 프로세스를 호출합니다. 여러 번 열기
- 29. 버튼을 두 번 이상 누르기 - PHP
- 30. 여러 키 누르기 보내기 WatiN
당신은 플래그가 필요합니다. 키를 놓을 때 플래그를 재설정하십시오. –