2011-10-17 3 views
1

안녕하세요, 제 첫 번째 2D Java 게임을 만들고 있습니다. 현재 타이머를 사용하여 모든 것을 제어하고 업데이트하고 있습니다. 2D Java 게임, Timers 또는 Threads에 가장 적합한 방법이 무엇인지 궁금 해서요? 현재 나는 모든 내용을 렌더링/렌더링하는 내 gameCanvas 클래스에 Timer를 가지고 있으며 충돌을 확인하고 있습니다. 나 또한 그를 움직이기 위해 사용되는 플레이어 용 타이머가있다.Java 2D 게임 - 타이머 대 스레드?

Timer timer = new Timer(5,this); 
timer.start(); 

너희들은 무엇을 추천 할 것입니다 : 나는 자바 프로그래밍에 새로 온 사람과 내가 넣어 가지고 모든이가 있었다 고려시 가장 쉬운 방법을 보였다 때문에

내가 타이머를 사용하는 유일한 이유는?

답변

2

게임 유형에 따라 다릅니다.

"빠른 게임"(예 : 슈터)의 경우 yield/wait (적절한 경우)가 포함 된 전용 게임 루프 (일반적으로 스레드)가 가장 잘 작동합니다. 는 "느린 게임"에 대한 타이머는 잘 작동합니다 - 타이머의 유형, 그러나이있다 :

  1. 는 "스윙"타이머 (javax.swing.Timer)
    1. 장점 : 그래서 스윙을 만질 수 동부 서머 타임에서 실행이/AWT는
    2. 단점이 객체 : 동부 서머 타임이 너무 가난한 해상도에서 실행시기는
  2. "서비스"타이머 (java.util.Timer),617을 보장
    1. 장점 :
      1. 가 지원하는 "고정 속도"타이머
      2. 실행 자신의 스레드가 (그래서 해상도/일관성이 더 되나 보장되지 않음)
    2. 단점 : 동부 서머 타임에 실행되지 않습니다 (그래서 Swing/AWT를 만질 수는 없다.) 많은 경우여전히 마지막 이벤트가 발생했을 때의 "델타"를 계산해야 게임에서

현재 이벤트가 발생하고 계산이를 사용하는 경우. 델타를 사용하는 모델이 없으면 게임 속도가 시스템마다 다를 수 있습니다.

개인적으로 "빠른 게임"루프에 적합한 고해상도 시계를 제공하는 LWJGL: Lightweight Java Game Library을 개인적으로 권하고 싶습니다. 또한 "직접"OpenGL 바인딩을 지원합니다 .-)

"저속 게임"개발 경험이 없습니다.

해피 코딩.

+0

고마워, 지금 내 게임은 간단하고 2D 미로 퍼즐이다. 가장 좋은 해결책은 무엇이라고 생각하십니까? –

+0

@pst +1 아무 것도 복잡하지 않습니다. (Swing/AWT를 만질 수 없습니다) 그리고 ... javax.swing.Action for ... – mKorbel

4

두 가지 접근 방식의 장점과 단점에 대해 pst가 말한 내용은 절대적으로 정확합니다.

그러나 권장하지는 않습니다. Slick2D과 같은 "게임용으로 설계된"게임 엔진을 사용하면 게임의 업데이트와 로직, 메인 게임 루프의 구조뿐만 아니라 저비용 게임을 많이 돌볼 수 있습니다. 당신이 달릴 수준 문제.

게임용 스윙을 사용하려는 경우 in my answer here에 설명 된 이유 때문에 게임에서 스윙을 사용하는 것을 고려하고 있다면 멀리 떨어져있을 것입니다.

Slick2D은 타이밍 문제를 처리하고 프레임 렌더링간에 델타를 계산하기 위해 사전 제작되어 제공됩니다. 입력 처리와 같이 독자적으로 만들 필요가없는 멋진 요소도 많이 있습니다. (키보드, 마우스, 컨트롤러), 가속 그래픽 (엔진이 자동으로 그래픽 가속 기능을 지원하므로 게임을 자동으로 처리 할 수 ​​있음), 오디오 준비가되면 훌륭한 오디오 라이브러리가 제공됩니다.

이 모든 것을 직접 쓰면 울고 싶을 것입니다. 엔진 자체를 구축하지 않는 한 (게임 로직 자체를 구축하는 데 시간을 투자하는 것과는 대조적으로) 성숙한 도구를 기성품으로 사용할 수있을 때 엔진을 만드는 것은 많은 시간을 소비합니다.

+0

처음부터 작성하는 것은 funnnnnnnnnnnnnnn입니다! 내가 말하는거야! ;-) +1 –

+1

:) 확실히 될 수 있습니다. 나는 방금 도구 대신 게임에 시간을 소비하는 것을 선호한다는 것을 배웠다. 확실히 개인적인 취향입니다. 어떤 사람들은 건축 도구를 좋아합니다. 내 물건이 아니야. – jefflunt

+0

답장을 보내 주셔서 감사합니다. 나는 성취감을 주므로 모든 것을 직접 쓰고 싶습니다. 현재 내 게임에 스윙을 사용하고 있습니다. AWT를 권해 주시겠습니까? –