2014-02-14 2 views
0

지금은 화면을 끊임없이 다시 그리는 메인 게임 루프가 있습니다. 이 스레드를 느리게 할 필요가 있지만 더 빠른 속도로 다른 항목을 그립니다. 새 스레드를 만들어야합니다. 문제는 새 스레드를 만드는 방법을 알기가 어렵다는 것입니다. 새 스레드를 만드는 방법을 알고 있습니다. 새 스레드에서 Graphics2D 드로잉을 구현하는 방법에 대해 고민하고 있습니다. 예를 들어, 나는 전형적인 시작점 인 코드를 가지고 있고 그 다음에는 무엇을 그리고 언제 드로잉 할지를 지시하는 다른 클래스에 정의 된 draw 메소드가있다. 나는 분기하고 다른 드로잉 드로잉을하고 자체 일을하고 싶다면 어떻게해야합니까?Java에서 화면을 그리는 새 스레드는 어떻게 만듭니 까?

완전히 새로운 PaintComponent()를 만드는 새로운 클래스를 만들어야합니까? 아니면 단순히 새로운 Graphics2D 객체를 만들면 다른 글꼴 색상 등을 사용할 수 있습니까? 내가 가장 혼란스럽게 생각하는 것은 g2d를 인수로 전달해야하기 때문에 다른 draw 메소드를 호출 할 수 없다는 것입니다. 따라서 g2d 객체가 이미있는 다른 메소드 내에서 스레드를 만들어야합니다.

혼란 스러울 경우 자바 초보자로서 사과드립니다. 더 많은 정보가 필요하시면 알려주세요. 미리 감사드립니다.

public abstract void draw(Graphics2D g2d); 



@Override 

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

super.paintComponent(g2d); 

draw(g2d); 
} 
+1

저는 게임 전문가가되는 것과는 거리가 멀지만 각 반복마다 빠른 속도로 다시 그려야하는 것을 다시 그리는 독특한 게임 루프를 고수해야합니다. N 회 반복마다 느린 속도. –

+0

그건 분명히 일에 대해가는 한 방법입니다. 네가하는 말을 이해한다면 내가 카운터를 사용할 수 있고 모든 루프마다 하나의 루프 만 가질 수 있다고 제안한다. 이 경우에는 실제로 여러 스레드를 사용해야한다고 생각합니다.보다 진보적 인 게임이 그것을 필요로하기 때문에 어쨌든 더 잘 사용하는 법을 배우는 것이 좋을 것입니다. 귀하의 의견을 보내 주셔서 감사합니다. 나는 누군가 다른 아이디어를 기다리고 기다릴 것이다. – user3312030

답변

0

처음에는 스윙이 본질적으로 단일 스레드입니다. 이것은 "단일 스레드 규칙"에 요약 된 적이 있습니다.

일단 Swing 구성 요소가 실현되면 해당 구성 요소의 상태에 영향을 줄 수있는 모든 코드를 이벤트 발송 스레드에서 실행해야합니다.

에서 (불행하게도, 각각의 사이트가 일에서 오라클 자바의 마이그레이션을 생존하지 못했지만, 몇 가지 정보가 여기 http://docs.oracle.com/javase/tutorial/uiswing/concurrency/dispatch.html을 발견하거나 할 수있다 "스윙 단일 스레드 규칙"에 대한 웹 검색을 수행 할 때) 일반적으로 이것은 그림에도 적용됩니다. paintComponent은 Event Dispatch Thread (EDT)에서만 안전하게 호출 할 수 있습니다. 그리고 그것은 "자동적으로"불릴 것입니다. 이 기술을 "수동 렌더링"이라고하는 이유는 다음과 같습니다. paintComponent 메서드를 EDT에서 호출 할 것으로 예상하여 덮어 씁니다.

그러나 특히 게임 개발의 경우 "활성 렌더링"이라는 기술을 사용할 수 있습니다. 이 경우 페인팅은 약간 더 복잡하며 자체적으로 BufferStrategy을 설정해야합니다. 잠재적 인 이점은 입니다.이 경우 스레드는 렌더링 작업을 수행 할 수 있습니다. BufferStrategy#getDrawGraphics을 호출하여 Graphics 개체를 얻을 수 있기 때문입니다.

http://docs.oracle.com/javase/tutorial/extra/fullscreen/rendering.html에서 정보를 찾을 수 있습니다 (전체 화면 렌더링을 말하며 유사한 개념을 창에서의 활성 렌더링에 적용 할 수 있지만 "스윙"과 같은 키워드로 찾을 수있는 자습서/리소스를 참조하십시오. 활성 렌더링 ").

+0

고맙습니다 Marco13. 나는 그것에 대해 읽어야 할 것이다. 다행히도 그것은 끔찍하게 복잡하지 않습니다. 다른 스레드에서 그릴 수있는 자유가 더 많아지면 노력할 가치가 있습니다. 적어도 이제는 계속할 일이 있습니다. – user3312030

관련 문제