저는 2D 전략 게임을 작성 중이며 한 번에 수백 개의 이미지를 표시 할 수 있어야합니다.한 번에 수백 개의 이미지를 JFrame에 효과적으로 그릴 수있는 방법은 무엇입니까?
지금까지 많은 수업이 있었지만 JFrame
구성 요소를 충분히 이해하지 못한다는 두려움 때문에 한 가지 딜레마가 있습니다.
import javax.swing.JFrame;
public class MainClass {
static JFrame Frame = new JFrame("MainFrame");
public static void main(String[] args){
Frame.add(new Board());
Frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Frame.setSize(1024, 500);
Frame.setVisible(true);
Frame.setResizable(false);
}
}
현재 보드 클래스는 프로그램의 중심에 앉아 클래스 : 나는 프레임을 구성하는 주요 클래스가
첫째, 나는 내 문제를 보여주기 위해 작은 3 종의 프로그램을 작성했습니다 프로그램 실행을 위해 모든 문자열을 가져옵니다. 이전에 인터넷에서 보았던 모든 자습서는 게시판 클래스에 paint(Graphics g)
메서드가 있음을 나타 냈지만 이것이 주요 딜레마입니다.
public board{
//......code....
public void paint(Graphics g){
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(b.getImage(0), 0, 0, null);//Black
g2d.drawImage(b.getImage(1), GameMachanic.getCurrentPosX(), GameMachanic.getCurrentPosY(), null);//background
g2d.drawImage(b.getImage(3), GameMachanic.getCurrentPosX(), GameMachanic.getCurrentPosY(), null);//background
//...more paint to screen code
}
//......code......
}
이 방법은 모든 밀리 초를 다시 칠하고 모든 중대하다 : 현재 내가 수동으로 내가 화면에 그려진 뭔가를 할 때마다를 입력 할 필요가! 제외 ... 이제는 다른 클래스에서 한 번에 화면에 그려진 수백 가지 요소를 필요로하는 점에 이르렀고이 현재의 메서드를 사용하면 각 페인트 명령을 수동으로 입력하여 코드를 비효율적으로 만들어야합니다. 그리고 솔직히 무의미합니다.
그러므로 나는 방법의 재사용을 만들고,이 육체 노동의 필요성을 대체하는 클래스를 만드는 시도,하지만 난 그것을 매우 열심히 작동하도록 찾는 오전 :public class GraphicsPaint extends JFrame{
public void paint(Graphics g,){
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(b.getImage(0), 0, 0, null);//image
}
}
을하지만이 클래스를 구현 어떻게 내 코드에 컴포넌트로 추가합니까? (그렇다면, 어떻게?) 나는 이것을 시도하고 나에게 오류를 던지기 때문에 몇 가지 레이아웃을 사용해 보았지만 어떤 이유로 든 고장이났다.
패널에 추가합니까? 그게 어떻게 풀릴 지 모르겠다. ..
나는 하루 종일이 문제를 보면서 보냈다.
"스윙 프로그램은'paint()'를 오버라이드하는 대신'paintComponent()'를 덮어 써야합니다."- [* AWT와 스윙의 페인팅 : 페인트 방법 *] (http://www.oracle.com/ technetwork/java/painting-140037.html # callbacks), [example] (http://stackoverflow.com/q/15961412/230513)을 참조하십시오. – trashgod
@trashgod의 충고에 덧붙여,'g2d.drawImage (b.getImage (0), 0, 0, null);은'g2d.drawImage (b.getImage (0), 0, 0, this);'모든 JComponent' **는 ** ImageObserver입니다 .. –
1) 더 빨리 도움을 받으려면 [MCVE] (http://stackoverflow.com/help/mcve) (Minimal 완전한 검증 가능한 예) 또는 [SSCCE] (http://www.sscce.org/) (단락, 자체 포함, 올바른 예). 2) 빈칸 한 줄의 공백이 소스 코드에 모두 필요합니다. '{'또는'}'앞의 공백 행은 일반적으로 중복됩니다.3) 들여 쓰기 코드 행과 블록의 논리적이고 일관된 형식을 사용하십시오. 들여 쓰기는 코드의 흐름을 따라 가기 쉽도록 만들어졌습니다. –