2013-03-11 2 views
2

나와 나와 친구가 게임을하고있다. 기본적으로 우리 캐릭터가 거미줄을 치면 캐릭터가 건강을 잃는다.게임 타이머 데미지 딜레이

우리는 for 루프를 사용하기 때문에 피할 수없는 일이 발생합니다. 플레이어는 1을 1로 잃지 만 너무 빨리 사람의 눈을 볼 수 없습니다. 따라서 플레이어가 거미를 때리는 x 시간마다 타이머, 일시 중지 또는 무언가가 필요합니다. 다음은 코드입니다.

 if (ResetEntities.spiderObj.intersects(ResetEntities.blueCharacterObj)) { 
     try { 
      Thread.sleep(10); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
     for (int i = 0; i < 100; i++) { 
      if (ResetEntities.blueHealth < 0) { 
       ResetEntities.blueHealth = 0; 
       Frame.blueHealthLabel.setText("Health: " 
         + ResetEntities.blueHealth); 
      } else { 
       ResetEntities.getBlueHealth(ResetEntities.blueHealth - 1); 
       Frame.blueHealthLabel.setText("Health: " 
         + ResetEntities.blueHealth); 
      } 
     } 
    } 

이 코드에는 교차로를 확인하는 if 문이 있습니다. 나는 스크립트를 잠자려고 노력했다. (나는 10이 놀랍도록 빠르다는 것을 깨달았지만, 1000은 끔찍하게 뒤죽박죽이다. 따라서 Thread#sleep은 상상할 수있는 방법이 아니다.) 그런 다음 for 문이 100 번 실행됩니다 (플레이어 상태 임). 그런 다음 건강 상태가 0보다 낮 으면 0으로 설정하여 플레이어가 부정적인 건강을 얻을 수 없도록합니다. 0보다 작지 않으면 else를 수행하고 1의 건강을 뺍니다. 하지만 제가 말했듯이 이것은 너무 빨리 달려서 보입니다.

어떤 도움이 필요합니까?

+0

코드는 한 가지 방법입니다. 100L ~ 200L 밀리 초의 시간 동안 수면을 시도하십시오. –

+1

'Java' 게임에서'Timer'를 설정하려면'Thread' 대신'javax.swing.Timer'를 사용하는 것이 좋습니다. – Rob

답변

1

배경 프로세스 타이밍에 Timer을 사용하십시오. javax.swing.SwingUtilities.invokeLater(Runnable)을 사용하여 GUI를 업데이트하십시오.

2

내 생각에 가장 좋은 방법은 상처 입은 캐릭터를 특정 시점까지 무적으로 만드는 것입니다. 캐릭터가 부상 당하면 게임 타임 라인을 확인하십시오. 하나는 현재 밀리 - 카운트) 그런 다음 특정 시간 (예 : 1 초 (또는 문자 종속 복구 시간))을 추가하고 문자 개체의 타임 스탬프를 기억하십시오. 캐릭터를 감 으려고하는 배우 틱은 캐릭터가 숨겨진 상태에 있는지를 먼저 확인합니다. 일반적으로 여러 스레드가 게임 상태를 업데이트하지 않기 때문에 특히 좋습니다.

1

질문은 명확하지 않지만 건강이 그렇게 빨리 떨어지는 것을 막을 수있는 방법을 묻고 있습니까? 그렇다면 내가 할 일은 다음과 같습니다 :

플레이어는 적중하면 int 값 invincibilityTime을 가져 와서 100으로 설정해야합니다. 게임이 게임 루프를 통과 할 때마다 1 씩 감소합니다. 초벌음 기간이 만료되었는지 확인하려면 (ResetEntities.spiderObj.intersects(ResetEntities.blueCharacterObj)) 앞에 if(invincibilityTime <= 0)을 넣으십시오.

관련 문제