나는 여기에 새로운 있습니다. 당신이 도울 수 있기를 바랍니다.자바 게임 개발 : 그래픽
문제점 : JFrame에 애니메이션을 표시하는 데 문제가 있습니다. Java 그래픽이 어떻게 작동하는지 충분히 이해하지 못한다.
글로벌 아이디어 : 게임/영화/클립을 만들고 싶다고합니다. 이것을 위해서 나는 (단순하지 않은) 간단한 애니메이션이 필요하다.
이 질문에 대한 예 : 나는 그것의 구성 (크기, 닫기 작업 등)을 설정하고 다음 클래스 상자의 개체를 창조하는 JFrame의의 화면 stuff- 선언을 가지고 클래스 화면을 가지고, 프레임에 표시됩니다. 이 이미지/클래스 다이어그램을 확인하십시오 (올바르게 작성했으면 좋겠 음). ClassesDiagram
이제 클래스 상자가 JPanel을 확장합니다. JPanel에서 Paint() 메서드를 상속하고 상자를 페인트하는 대신 재정의합니다.
Screen 클래스에서 두 개의 Box를 만든 후 JFrame에 추가 (i .add)합니다. 그런 다음 루프를 시작하면서 (true) 스레드가 해당 양을 잠자 게함으로써 200 밀리 초마다 상자의 위치를 업데이트합니다. (이 경우, 단순한 x ++ 또는 y ++는 box1 또는 box2의 어느 상자에 종속되어 있는가).
주요 문제 1) :이 프로그램은 실행하고 JFrame의 표시되지만 JFrame의에이 만 마지막으로 추가 된 객체/컴포넌트 - 상자 보여줍니다. 다른 하나는 보여주지 않습니다. 왜?
주제가 How to add multiple components to a JFrame? 인 것을 발견했으며 가장 투표가 많은 게시물을 jjnguy11 월 15, 2010 17:02에으로 작성했습니다. 이상한 이유로 첫 번째 팁이 아니고 두 번째 팁도 저에게 효과적이었습니다.
주된 문제 2) : 내가 아는 한, 나는 레이아웃 매니저가 필요하다. 프레임의 특정 X, Y에 페인트를하고 싶다면 왜 필요합니까?
다른 게시물 (다시 발견 할 수 없음) + 레이아웃에 대한 오라클의 지침을 찾았다면 setLayout (null) 사용을 고려해야한다고 제안했습니다. 나는 그렇게하려하지만, 다시 한 번 문제가있다.
주요 문제 3) : JFrame이 나타나면 1 개의 상자 만 표시됩니다 (녹색이 표시되지 않습니다. 이유는 모르겠 음). 이동하면 지워집니다. 반대편. 여기에 : Box Movement
도움, 팁 및 설명을 미리 감사드립니다! 희망, 게시물을 명확하고, 조직, 그리고 좋은 찾고 있습니다.
public class Screen {
public static void main(String[] args) {
new Screen();
}
private JFrame window;
public Screen() {
window = new JFrame("Multiply components panel");
//window.setLayout(null);
window.setSize(200, 200);
window.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
Box b1 = new Box(10,10, "box1");
//b1.setBounds(10, 10, 50, 50);
Box b2 = new Box(100,100, "box2");
//b2.setBounds(100, 100, 50, 50);
window.add(b1);
//window.add(b2);
window.setVisible(true);
while (true){
b1.update();
b2.update();
try {
Thread.sleep(200);
} catch (Exception e) {
// TODO: handle exception
}
}
}
}
public class Box extends JPanel{
int x, y, w, h;
private String name;
public Box(int x, int y, String name) {
this.x = x;
this.y = y;
this.w = 100;
this.h = 100;
this.name=name;
}
public void paint(Graphics g){
System.out.println(this.name.equalsIgnoreCase("box1"));
if(this.name.equalsIgnoreCase("box1")){
g.setColor(Color.BLACK);
g.fillRect(x, y, w, h);
}else{
g.setColor(Color.GREEN);
g.fillRect(x, y, w, h);
}
}
public void update() {
if(this.name.equalsIgnoreCase("box1"))
x++;
else
y++;
//this.setBounds(x, y, w, h);
System.out.println("Current "+name+": X: "+x+", Y: "+y+", W: "+w+", H: "+h);
repaint();
}
}
1 년 동안 피드를 제공하지만, [Concurrency in Swing] (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/)을 먼저 살펴본 후 SO를 찾아보십시오. 스윙과 애니메이션 – MadProgrammer
@DavidKroukamp 유용한 링크를 제공해 주셔서 감사합니다. 나는 그것을 조사해보고 거기에서 물건을 어떻게 만들 었는지보십시오. 그래도 내가 빠진 것을 이해하고 싶습니다. 단지 2 개의 객체를 만드는 것은 너무 복잡하지 않아야합니다. 나는 그 배후의 아이디어를 이해하고 싶다. – Daniel
@MadProgrammer 그럼 네가 그걸로 살아야 해, 아빠. 링크를 가져 주셔서 감사합니다. 얼마나 유용한 지 확신 할 수 없습니다. 깊이있는 스레드가 작동하는 것처럼 보입니다. 필요한 것은 아닙니다. 적어도 지금은. – Daniel