2017-01-16 4 views
1

Java에서 내 APCS 클래스 용 게임을 만들고 있습니다. 그것은 대수학 및 수학을 사용하지만 문제가 아닙니다.내 렌더링 방법에 아무 것도 표시되지 않는 이유는 무엇입니까?

어떤 이유로 Enum이 작동하지 않기 때문에 상태 클래스 대신 State 클래스를 사용합니다.

public class State { 
    private int option; 
    public int getState(){ 
     return option; 
    } 
    public void setState(int option){ 
     this.option=option; 
    } 
} 

지금, 나는 실제 게임 상태 번호 상태를 설정할 때 배경을 표시하지 않습니다 제외하고, 그것은, 잘 실행되기 때문에 이것은 문제가되지 않습니다 90 % 확신한다.

public Rectangle playButton= new Rectangle(GameMain.WIDTH/2 +120,200,117,49); 
    public Rectangle helpButton= new Rectangle(GameMain.WIDTH/2 +120,300,117,49); 
    public Rectangle quitButton= new Rectangle(GameMain.WIDTH/2 +120,400,117,49); 

    ImageLoader loader = new ImageLoader(); 

    GameMain game; 

    public BufferedImage bgrd, play,help, quit; 

    public void init(){ 
     try { 
      bgrd = loader.loadImage("res/imgs/bgrd.png"); 
      play = loader.loadImage("res/imgs/play.png"); 
      help = loader.loadImage("res/imgs/help.png"); 
      quit = loader.loadImage("res/imgs/exit.png"); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

    } 



    public void render(Graphics g){ 
     Graphics2D g2d = (Graphics2D) g; 

     g.drawImage(bgrd,0,0, null); 
     g.drawImage(play,game.WIDTH/2 +120,200,null); 
     g.drawImage(help,game.WIDTH/2 +120,300,null); 
     g.drawImage(quit,game.WIDTH/2 +120,400,null); 

    } 

당신은 스스로를 테스트 할 수 있지만 모든 이미지는 올바른 디렉토리에 있고 고해상도 폴더는 빌드 경로에 추가되었습니다

내 메뉴 클래스는 다음과 같습니다.

ImageLoader 클래스에는 BufferedImage를 반환하는 loadImage 메서드가 포함되어 있습니다. 내 GameMain 클래스에서

,이 이미지를 표시해야하는 내 렌더링 방법 : 여기

private void render(){ 
     BufferStrategy bStrat = this.getBufferStrategy(); 
     if(bStrat==null){ 
      createBufferStrategy(3); 
      return; 
     } 
     Graphics g = bStrat.getDrawGraphics(); 
     if(state.getState()==1){ 
      menu.render(g); 
     } 
     if(state.getState()==2){ 

     } 
     if(state.getState()>2 && state.getState()<11){ 

      Font font=new Font("Verdana",Font.BOLD,20); 

      g.setFont(font); 

      g.drawImage(bgrd,0,0,this); 

      g.drawString(gameName, 300, 100); 
      g.drawImage(wizard,x,y-75,this); 
      g.drawImage(hdkn,x,y,this); 

      g.dispose(); 
      bStrat.show(); 
     } 
     if(state.getState()==11){ 

     } 

    } 

그리고를 내 init 메소드 (I 완료있을 때) 모든 초기화되는 :

public void init(){ 
     state=new State(); 
     state.setState(1); 
     loader = new ImageLoader(); 
     menu=new Menu(); 
     menu.init(); 

     try{ 
      bgrd=loader.loadImage("res/imgs/bgrd.png"); 
      wizard=loader.loadImage("res/sprites/wiz.png"); 
      hdkn=loader.loadImage("res/sprites/hdkn.png"); 
     }catch(IOException e){ 
      e.printStackTrace(); 
     } 

    } 
을 나는 메뉴 상태 (1)로 상태를 설정할 때

이것은 결과입니다 Menu State Game

그리고 이것은 국가가 할머니로 설정되어있을 때 결과입니다 전자 상태 (숫자 3-10) : Game State Game

편집 : 누군가가 ... 내 생각, 내 주요 방법을보고 싶어

game=new GameMain(); 

     game.setPreferredSize(new Dimension(WIDTH,HEIGHT)); 
     game.setMaximumSize(new Dimension(WIDTH,HEIGHT)); 
     game.setMinimumSize(new Dimension(WIDTH,HEIGHT)); 



     JFrame frame = new JFrame("Math Game"); 
     frame.add(game); 

     frame.pack(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setResizable(false); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 

     game.start(); 

편집 : 작동하지 않은 이유 이 발견했다. 내 GameMain 렌더링 메서드에서 render 메서드를 호출 한 후 bStrat.show()를 포함하지 않았습니다.

편집 2 : 그것은 어쩌면

+0

, 내가 한번 풀어주고 열거가 작동되지 않은 이유를 찾을 다시 –

+0

을 얻을 것이다 :

여기를 보라. 분명히 그것은 IDE 이슈 (Eclipse)이므로 JRE 작업 영역을 다시로드하면됩니다. –

+0

'Enum' 때문에 문제가 되었습니까? –

답변

0

당신의 Graphic 자원 할당 또는 무언가를 해제하도록, 그 전에) 나는 내 코드를 다시 보니 사람이 그것을 사용하고자하는 경우, 당신은 또한 g.dispose을 (놓아야합니다 오브젝트 g은 즉시 칠할 수 없습니다. 사용해보기를 요청한 후

g.paintImmediately(0,0, /*your graphic width here*/, /*your graphic height here */) 

을 사용해보세요. 그러면 시스템에서 새로 고칠 시간을 선택하지 않고 그래픽을 UI로 강제로 새로 고칩니다 (이번에 만). 좋아 https://docs.oracle.com/javase/7/docs/api/javax/swing/JComponent.html#paintImmediately(int,%20int,%20int,%20int)