2011-04-07 5 views
1

화면을 표시하려는 이미지로 변경하는 데 문제가 있습니다.Java : Keystate 조작 문제

화상 배열로 설정되어 spritesheet (즉 첫 번째 화면 배열 인덱스 0 등 ..이다) I는 UP 키와 좌측 키를 누르고 키를 입력하면

내가 변경할 수 프로그램은 DOWN 키를 눌러 올바른 이미지를 표시하지 않습니다.

결국 나는 화살표 키를 버리고 숫자 (전화 번호 키)를 반환하고 4를 돌려 보내고, 1,2,3을 특정 페이지로 이동하고 다음 페이지로 이동하려면 입력하십시오. 특정 페이지에 대한 자세한 정보.

private void actOnKeyStates(int k) { 
     if ((k & DOWN) != 0) { 
      Title = false; 
      HowToPlay = true; 
      Controls = false; 
      About = false; 
     } 
     if ((k & UP) != 0) { 
      Title = false; 
      HowToPlay = false; 
      Controls = true; 
      About = false; 
     } 

     if ((k & LEFT) != 0) { 
      Title = true; 
      HowToPlay = false; 
      Controls = false; 
      About = false; 
     } 

     if ((k & FIRE_PRESSED) != 0) { 
      Title = false; 
      HowToPlay = false; 
      Controls = false; 
      About = true; 
     } 
     update(); 

    } 

    public void update() { 
     if (Title) { 
      Screen.setFrame(0); 
     } 
     if (HowToPlay) { 
      Screen.setFrame(1); 
     } 
     if (Controls) { 
      Screen.setFrame(4); 
     } 
     if (About) { 
      Screen.setFrame(5); 
     } 

    } 

나는이 문제에 대해 조언을드립니다.

+0

무엇이 잘못된 것인지 잘 모르겠지만 디버깅을 제안하고 키를 누를 때 실제로 k 값이 무엇인지 확인하는 것이 좋습니다. – Taylor

답변

0

처음에는 증가하는 부울 값을 사용하는 것보다 게임을위한 상태를 설정하는 것이 더 좋을 것이라고 생각합니다. 이와 같은 :

public enum ScreenState { Title, HowToPlay, Controls, About }  
private ScreenState currentScreen = ScreenState.Title; 

private void actOnKeyStates(int k) { 
    if ((k & DOWN) != 0) { 
     currentScreen = ScreenState.HowToPlay; 
    } 

    if ((k & UP) != 0) { 
     currentScreen = ScreenState.Controls; 
    } 

    if ((k & LEFT) != 0) { 
     currentScreen = ScreenState.Title; 
    } 

    if ((k & FIRE_PRESSED) != 0) { 
     currentScreen = ScreenState.About; 
    } 

    update(); 
} 

public void update() { 
    switch(currentScreen) { 
     case Title:  
      Screen.setFrame(0); 
      break; 
     case HowToPlay: 
      Screen.setFrame(1); 
      break; 
     case Controls: 
      Screen.setFrame(4); 
      break; 
     case About: 
      Screen.setFrame(5); 
      break; 
    } 
} 

당신이해야 할 두 번째 것은 아래쪽 화살표를 누르면 & DOWN가 제대로 실행되고 있음 K 확인합니다. 또한 찾고있는 이미지가 스프라이트 시트의 1 위치에 올바르게 놓여 있는지 확인하십시오.