2015-01-18 4 views
0

솔루션 :자바 스윙 애니메이션 스윙 구성 요소

네 잘못이다. 절대로 결코 절대로 회화 방법 내에서 파일/이미지를 읽지 마십시오. 이 방법은 눈부신 속도가 빨라야하며 그림 만 포함해야하며, 파일을 읽으면 불필요하게 GUI가 느려지 게됩니다. 그리고 왜 이것을합니까? 생성자 또는 메서드에서 이미지를 한 번 읽은 다음 필요한만큼 여러 번 paintComponent에서 이미지 객체를 다시 사용할 수 있습니다.

제쳐두고 이미지를 파일이 아닌 리소스로 얻는 것이 좋습니다.

덕분에, 뱀장어의 호버 전체가


나는 '후르츠 닌자'의 매우 간단한 버전을 만드는 오전. 과일이 화면 위로 날아가고 사용자가 두 단으로 잘라야하는 게임.

과일에 ImageIcon이있는 JLabel을 사용하고 있습니다. 나는 운동을 위해 스윙 타이머를 사용한다.

애니메이션에서도 훌륭하게 작동하지만 여기서 까다로운 부분이 있습니다. 배경 이미지를 추가 할 때 애니메이션이 너무 오래 지체됩니다.

질문 : 스윙 애니메이션이 성능을 저하시키지 않으면 서 어떻게 배경 이미지를 추가 할 수 있습니까?

아래에 몇 가지 코드를 추가했습니다. 내 배경 이미지를 그릴

내 인 JPanel는 :

public class PlayingField extends javax.swing.JPanel { 

public PlayingField() 
{ 
    this.setBounds(0, 50, 500, 500); 
    this.setLayout(null);  
} 

@Override 
    protected void paintComponent(Graphics g) { 

    super.paintComponent(g); 

    BufferedImage img = null; 
    try { 
     img = ImageIO.read(new File(System.getProperty("user.dir")+"/assets/background.png")); 
    } catch (IOException e) 
    { 

    } 
     g.drawImage(img, 0, 0, null); 
} 
} 

내가 그들에 그리기있어 개체는 ImageIcons와 단순한 JLabels 있습니다. 객체를 이동하는 코드

public class GameTimer extends javax.swing.Timer implements ActionListener { 

GameController gameController; 

public GameTimer(GameController gameController) { 
    super(delay, null); 
    this.addActionListener(this); 
    this.gameController = gameController; 

} 

@Override 
public void actionPerformed(ActionEvent e) 
{ 

     gameController.moveObject(); 
} 

} 

와 마지막하지만 적어도 :

public void moveObject() 
{ 

    activeObject.setPositionY((activeObjectView.getPositionY()+1)); 
    playingField.repaint(); 
} 
+2

예, 특히 배경 이미지를 추가하는 방법은 코드를 확인하는 것이 좋습니다. 내 두려움은 당신이 페인트 또는 paintComponent 또는 그와 같은 끔찍한 무언가 내에서 이미지를 프로그램으로 읽는 것일 수 있다는 것입니다. 이러한 질문에 대해서는 거의 항상 코드가 필요하며, [최소 코드 예제 프로그램] (http://stackoverflow.com/help/mcve)을 작성하고 게시하는 것이 가장 좋습니다. –

+0

그래, 난 paintComponent 재정의에서 그랬어. 틀렸어? 올바른 방향으로 나를 가리켜 주시겠습니까? 나는 약간의 코드를 추가했다! 감사! – user3249696

+1

'paintComponent' 메서드로 이미지를로드하지 마라 !!!!1111 생성자에 ** 한번 ** **로드하고, ** paintComponent' 메소드에서 ** 페인트 ** 만로드하십시오. 그러면 성능 문제가 이미 사라질 가능성이 큽니다. – Marco13

답변

6

예는 잘못

나는 애니메이션을 처리하는 타이머를 가지고있다. 절대, 절대로, 절대로, NEVER 페인팅 방법으로 파일/이미지를 읽습니다. 이 방법은 눈부신 속도가 빨라야하며 그림 만 포함해야하며, 파일을 읽으면 불필요하게 GUI가 느려지 게됩니다. 그리고 왜 이것을합니까? 생성자 또는 메서드에서 이미지를 한 번 읽은 다음 필요한만큼 여러 번 paintComponent에서 이미지 객체를 다시 사용할 수 있습니다.

제쳐두고 이미지를 파일이 아닌 리소스로 얻는 것이 좋습니다.

+2

귀하의 의견을 읽으면서 나는 문자 그대로 자신을 얼굴에 때 리고 있습니다. 그렇게 분명한 사실, 나는 처음부터 이것을 보지 못한 이유가 전혀 없습니다. 그것이 문제인지 내 게시물을 업데이트하는지 체크 아웃하겠습니다! 고마워요 – user3249696

+0

그래, 그게 효과가 있었어. 다시 한번 고마워요! 당신은 정말로 나를 도왔습니다! 리소스를 살펴 봅니다! – user3249696

+0

@ user3249696 : 도움이 되니 기쁩니다! –