2013-06-15 1 views
1

현재 Java 게임을하고 있으며, 플레이어의 건강 상태를 나타내는 int 값이 100으로 시작하고 건강이 매회 5 씩 감소합니다 그러나 적과 교차 할 때마다 1 초에 60 번 확인합니다. 따라서 초 당 60 초 동안 빠르게 감소합니다. 플레이어는 적과 접촉하여 매초마다 300 초씩 내려갑니다. int 값이 약 3-5 초 동안 변경되는 것을 막을 수 있는지 궁금합니다.특정 시간 동안 증가 또는 감소하는 것을 중지하십시오.

try { 
    Thread.sleep(4000); 
} catch(InterruptedException ie) { 
    Thread.currentThread().interrupt(); 
} 

그리고 다음 INT는 그 이후에 추가 할 수 있지만,이 단 4 초 동안 전체 프로그램을 중지하고 무슨 다른 일이 : 그게 가능하다면, 나는이 시도 모른다 그 시간에.

+2

여기에 더 많은 정보를 제공해야한다고 생각합니다. – Vegard

+0

세터 메소드 작성 및 제어 ............. – pinkpanther

+0

"int가 감소하는 것을 막는 방법"에 집중하지 말고 게임 루프가 어떻게 작동하는지 다시 고려해야합니다. 이런 일은 단지 한 번 발생하는 "사건"으로 통합 될 필요가 있습니다. 플레이어가 * 처음 * 적을 만졌을 때 "접촉"이벤트가 발생하고 플레이어가 적과 접촉을 멈출 때까지 (그리고 히스테리 시스라고하는 시간이 경과 할 때까지) 이벤트가 다시 발생할 수 있습니다. 까다 롭지 만 올바른 방법을 강구해야합니다. 그렇지 않으면 코드가 빠르게 김을내는 거대한 더미가됩니다. –

답변

1

"Thread.sleep은 현재 스레드가 실행을 일시 중단하도록합니다."- 전체 스레드를 중지하지 않으려는 경우 사용하지 마십시오.

int 값을 변경하는 스레드를 생성 한 다음 주기적 작업을 수행하기 위해 ScheduledExecutorService#scheduleAtFixedRate을 사용할 수 있습니다. 예 :

Runnable myRunnable = new Runnable() { 
    public void run() { 
     //... 
    } 
}; 

ScheduledExecutorService ex = Executors.newScheduledThreadPool(1); 
ex.scheduleAtFixedRate(myRunnable , INITIAL_DELAY, PERIOD, TIMEUNIT); 

이제 스레드를 실행할시기와 기간을 결정할 수 있습니다. 그러나 너무 늦기 전에 디자인을 재고하고 코드가 더러워지기를 권장합니다.

관련 문제