솔루션 :자바 스윙 애니메이션 스윙 구성 요소
네 잘못이다. 절대로 결코 절대로 회화 방법 내에서 파일/이미지를 읽지 마십시오. 이 방법은 눈부신 속도가 빨라야하며 그림 만 포함해야하며, 파일을 읽으면 불필요하게 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();
}
예, 특히 배경 이미지를 추가하는 방법은 코드를 확인하는 것이 좋습니다. 내 두려움은 당신이 페인트 또는 paintComponent 또는 그와 같은 끔찍한 무언가 내에서 이미지를 프로그램으로 읽는 것일 수 있다는 것입니다. 이러한 질문에 대해서는 거의 항상 코드가 필요하며, [최소 코드 예제 프로그램] (http://stackoverflow.com/help/mcve)을 작성하고 게시하는 것이 가장 좋습니다. –
그래, 난 paintComponent 재정의에서 그랬어. 틀렸어? 올바른 방향으로 나를 가리켜 주시겠습니까? 나는 약간의 코드를 추가했다! 감사! – user3249696
'paintComponent' 메서드로 이미지를로드하지 마라 !!!!1111 생성자에 ** 한번 ** **로드하고, ** paintComponent' 메소드에서 ** 페인트 ** 만로드하십시오. 그러면 성능 문제가 이미 사라질 가능성이 큽니다. – Marco13