2011-08-05 13 views
0

현재 Java 용 간단한 게임 세트 (GUI로 JavaFX2 포함)를 개발 중입니다. 이제 막 "일시적인 타이머"가 필요했습니다. 누가 직접 게임을 구현하지 않고 타이머를 일시 중지 할 수있게 해주는 게임 타이밍을위한 라이브러리를 아는 사람이 있습니까? 카운트 다운 및 고정 금리를 구현하기위한 것.자바 게임 : 일시 중지/재개 가능성이있는 타이밍

내가 필요 : - 일정 TimerTasks을 특정 비율 (JDK에 이미 먹으 렴) - 고정 지연 와 일정 TimerTasks - 타이머 을 일시 정지 - 타이머를 다시 시작 그래서 내가 그것을 일시 정지 곳의 모든 시작 .

누군가가 그런 것을 알고 있다면 정말 멋질 것입니다.

감사합니다.

답변

3

JDK에는이 작업을 수행하는 데 필요한 것이 없으므로 어떤 라이브러리를 사용할지 모릅니다.

그러나 나는 일종의 타이머를 일시 중지하고 다시 시작하는 대신 일시 중지되지 않은 상태에서만 실행되도록 조건에서 주기적으로 실행하는 것에 의존하는 모든 것을 래핑해야한다고 생각합니다. 작업이 예약되는 속도가 충분히 빠르면 차이가 눈에 띄지 않아야합니다. 예를 들어 :

public abstract class PausableTask extends TimerTask { 
    private final AtomicBoolean isPaused; 

    public PausableTask(AtomicBoolean flag) { 
    isPaused = flag; 
    } 

    @Override public final void run() { 
    if (!isPaused.get()) go(); 
    } 

    public abstract void go(); 
} 

은 그럼 당신은 하나 개의 글로벌 일시 정지 플래그를 가질 수있다, 당신은 TimerTasks를 사용하는 모든 시간, 글로벌 플래그를 전달하는 대신이 클래스를 사용합니다. 플래그를 PausableTask 클래스의 공용 정적 변수로 만들 수도 있습니다.

어쩌면이 접근법은 게임에도 적용되지 않을 수 있으며 더 정확한 일시 중지가 필요한 이유가있을 수 있습니다. 그렇지 않은 경우 잘하면이 도움이됩니다.

+0

타이밍이 더 중요하다는 사실 때문이 아닙니다. 타이머가 게임의 모든 시점에서 이미 실행 된 시간을 말할 수 있어야합니다. 타이머를 일시 중지 한 다음 항상 올바른 값으로 타이머를 다시 시작해야합니다. –

0

당신은 석영 대기 방법에서 AA 살펴 걸릴 수도 있습니다 -

http://www.quartz-scheduler.org/docs/api/1.8.1/org/quartz/Scheduler.html#standby()는 API에서

-

Temporarily halts the Scheduler's firing of Triggers. 

When start() is called (to bring the scheduler out of stand-by mode), trigger misfire instructions will NOT be applied during the execution of the start() method - any misfires will be detected immediately afterward (by the JobStore's normal process). 

The scheduler is not destroyed, and can be re-started at any time. 

석영은 당신이 플러그인 할 수있는 아주 좋은 프레임 워크를 당신의 신청. 또한 사용자 정의가 가능하므로이를 활용할 수 있습니다.