C # 단일 타이머로 다른 클래스에 알리는 방법은 무엇입니까?

용지 광

일정 시간이 지나면 알림이 필요한 모든 것을 글로벌 타이머로 만들려고합니다.

예를 들어 게임에서는 버프와 공격 쿨 다운 타이머, 아이템 쿨 다운 등이 있습니다.

개별적으로 관리하는 것은 좋지만 모두 동일한 타이머에서 실행되도록하려면 어떻게해야합니까?

나는 시간이 다되었을 때 단순히 호출되는 값으로 부동 소수점을 키로 사용하고 대리자를 사용하여 SortedList를 사용하려고 시도했지만 관리 할 수없는 것 같습니다. Generic 매개 변수를 사용하여 대리자를 시도했지만 정렬 된 목록에 넣을 수 없습니다.

누구든지 올바른 방향으로 나를 가리킬 수 있습니까?

제로

두 가지 옵션을 지적 할 수 있습니다.

  1. 해당 클래스에 대한 타이머 틱 로직을 구현 TimerControlled하는 메서드 TimerTick(whatever arguments you need)(및 필요한 경우 다른 것 )를 사용하여 (모든 이름을 변경할 수 있음)과 같은 인터페이스를 만듭니다 . 타이머 종속 메커니즘을 사용하는 각 클래스에서 인터페이스를 구현하십시오. 마지막으로 기본 (논리) 클래스에서 모든 TimerControlled객체를 배열 (of TimerControlled)에 추가하면 해당 배열을 순환하고 해당 객체의 TimerTick 메서드를 2 줄의 코드로 호출 할 수 있습니다.

상호 작용:

interface TimerControlled
{
   void TimerTick();
}

각 클래스에서 구현하십시오.

public class YourClass: TimerControlled{
   ....
   public void TimerTick(){
      advanceCooldown();
      advanceBuffTimers();
   }
}

마지막으로 클래스를 목록에 추가하십시오 TimerControlled.

class YourLogicClass{
   List<YourClass> characters= new List<YourClass>();
   private timer;
   List<TimerControlled> timerControlledObjects = new List<TimerControlled>();
   ...
   public void Initialize(){
      ... //your code, character creation and such
      foreach(YourClass character in characters){ //do the same with all objects that have TimerControlled interface implemented
         timerControlledObjects.add(character);
      }
      timer = new Timer();
      timer.Tick += new EventHandler(timerTick)
      timer.Start();

   } 

   public void timerTick(Object sender, EventArgs e){
      foreach(TimerControlled timerControlledObject in timerControlObjects){
         timerControlledObject.TimerTick();
      }
   }

}
  1. (장기적으로는 좋은 옵션이 아닙니다) 같은 정적 클래스의 정적 Global.timer타이머는 해당 타이머의 인스턴스가 하나만 존재 함을 의미합니다. 그런 다음 각 관련 클래스의 타이머에 이벤트 핸들러를 연결하여 타이머 틱을 처리합니다.

암호:

public static class Global{
//I usually create such class for global settings
   public static Timer timer= new Timer();
}



class YourLogicClass{
   public void Initialize(){
       ... 
       Global.timer.Start();
   }
}

class YourClass{

   public YourClass(){
      Global.timer.tick += new EventHandler(timerTick);
   }


   private void timerTick(Object sender,EventArgs e){
      advanceCooldowns();
      advanceBuffTimers();
   }
}

머리 위에서 코드를 작성 했으므로 구문 오류가있을 수 있지만 논리는 맞습니다.

답변에 대해 더 궁금한 점이 있으면 질문하십시오.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

C # 단일 타이머로 다른 클래스에 알리는 방법은 무엇입니까?

분류에서Dev

Objective-C의 다른 클래스에서 데이터를로드하는 방법은 무엇입니까?

분류에서Dev

PyQt5로 다른 UI 클래스를 가진 단일 창을 갖는 방법은 무엇입니까?

분류에서Dev

C에서 한 파일에서 다른 단어로 내용을 복사하는 방법은 무엇입니까?

분류에서Dev

g ++로 다른 파일에 정의 된 클래스를 생성하는 방법은 무엇입니까?

분류에서Dev

다른 폴더의 파일에서 파이썬 클래스를 가져 오는 방법은 무엇입니까?

분류에서Dev

C ++ 클래스를 다른 클래스의 구성원으로 정의하는 방법은 무엇입니까?

분류에서Dev

단일 클래스 속성에서 다른 XML 요소를 읽는 방법은 무엇입니까?

분류에서Dev

단일 쿼리에서 서로 다른 테이블의 값을 집계하는 방법은 무엇입니까?

분류에서Dev

다른 파일 이름으로 클래스를 자동로드하는 방법은 무엇입니까? PHP

분류에서Dev

파이썬에서 일치 단어를 다른 단어로 바꾸는 방법은 무엇입니까?

분류에서Dev

Java에서 다른 모듈의 동일한 클래스 사이의 클래스에 매개 변수를 전달하는 방법은 무엇입니까?

분류에서Dev

스타일 또는 클래스 이름을 추가하고 웹 구성 요소에서 다른 요소를 제거하는 방법은 무엇입니까?

분류에서Dev

한 클래스에서 다른 클래스로 GeoPosition을 전달하는 방법은 무엇입니까?

분류에서Dev

JBoss EAP의 다른 항아리로 WEB-INF / lib의 항아리에있는 일부 클래스를 재정의하는 방법은 무엇입니까?

분류에서Dev

Azure Durable Functions Orchestrator에서 다른 클래스로 논리를 이동하는 방법은 무엇입니까?

분류에서Dev

클래스의 배열을 다른 클래스에있는 단일 배열에 배치하는 방법은 무엇입니까?

분류에서Dev

C ++에서 다른 유형의 여러 데이터 멤버가있는 클래스를 처리하는 방법은 무엇입니까?

분류에서Dev

Django : 다른 추상 클래스에 정의 된 사용자 지정 관리자를 계단식으로 배열하는 방법은 무엇입니까?

분류에서Dev

두 개의 다른 .Java 파일에서 클래스를 처리하는 방법은 무엇입니까?

분류에서Dev

다른 클래스로 동일한 변수를 수정하는 방법은 무엇입니까?

분류에서Dev

다른 CSS 파일 / 클래스로 요소를 재정의하지 않는 방법은 무엇입니까?

분류에서Dev

C ++에서 거의 비슷하게 다른 클래스 인수를 처리하는 동일한 이름으로 동일한 함수를 작성하는 방법은 무엇입니까?

분류에서Dev

C ++에서 단일 클래스를 동적으로 할당하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

클래스 레벨 타이머를 중지하는 방법은 무엇입니까? - 빠른

분류에서Dev

Downloadmanager 클래스로 / databases 폴더에 파일을 다운로드하는 방법은 무엇입니까?

분류에서Dev

C '클래스'를 중심으로이 C ++ 래퍼를 일반화하는 방법은 무엇입니까?

분류에서Dev

파일로드 순서와 관계없이 다른 파일에서 GAS 클래스를 사용하는 방법은 무엇입니까?

분류에서Dev

Swift : 현재 클래스의 다른 클래스에 클래스의 델리게이트를 할당하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    C # 단일 타이머로 다른 클래스에 알리는 방법은 무엇입니까?

  2. 2

    Objective-C의 다른 클래스에서 데이터를로드하는 방법은 무엇입니까?

  3. 3

    PyQt5로 다른 UI 클래스를 가진 단일 창을 갖는 방법은 무엇입니까?

  4. 4

    C에서 한 파일에서 다른 단어로 내용을 복사하는 방법은 무엇입니까?

  5. 5

    g ++로 다른 파일에 정의 된 클래스를 생성하는 방법은 무엇입니까?

  6. 6

    다른 폴더의 파일에서 파이썬 클래스를 가져 오는 방법은 무엇입니까?

  7. 7

    C ++ 클래스를 다른 클래스의 구성원으로 정의하는 방법은 무엇입니까?

  8. 8

    단일 클래스 속성에서 다른 XML 요소를 읽는 방법은 무엇입니까?

  9. 9

    단일 쿼리에서 서로 다른 테이블의 값을 집계하는 방법은 무엇입니까?

  10. 10

    다른 파일 이름으로 클래스를 자동로드하는 방법은 무엇입니까? PHP

  11. 11

    파이썬에서 일치 단어를 다른 단어로 바꾸는 방법은 무엇입니까?

  12. 12

    Java에서 다른 모듈의 동일한 클래스 사이의 클래스에 매개 변수를 전달하는 방법은 무엇입니까?

  13. 13

    스타일 또는 클래스 이름을 추가하고 웹 구성 요소에서 다른 요소를 제거하는 방법은 무엇입니까?

  14. 14

    한 클래스에서 다른 클래스로 GeoPosition을 전달하는 방법은 무엇입니까?

  15. 15

    JBoss EAP의 다른 항아리로 WEB-INF / lib의 항아리에있는 일부 클래스를 재정의하는 방법은 무엇입니까?

  16. 16

    Azure Durable Functions Orchestrator에서 다른 클래스로 논리를 이동하는 방법은 무엇입니까?

  17. 17

    클래스의 배열을 다른 클래스에있는 단일 배열에 배치하는 방법은 무엇입니까?

  18. 18

    C ++에서 다른 유형의 여러 데이터 멤버가있는 클래스를 처리하는 방법은 무엇입니까?

  19. 19

    Django : 다른 추상 클래스에 정의 된 사용자 지정 관리자를 계단식으로 배열하는 방법은 무엇입니까?

  20. 20

    두 개의 다른 .Java 파일에서 클래스를 처리하는 방법은 무엇입니까?

  21. 21

    다른 클래스로 동일한 변수를 수정하는 방법은 무엇입니까?

  22. 22

    다른 CSS 파일 / 클래스로 요소를 재정의하지 않는 방법은 무엇입니까?

  23. 23

    C ++에서 거의 비슷하게 다른 클래스 인수를 처리하는 동일한 이름으로 동일한 함수를 작성하는 방법은 무엇입니까?

  24. 24

    C ++에서 단일 클래스를 동적으로 할당하는 가장 좋은 방법은 무엇입니까?

  25. 25

    클래스 레벨 타이머를 중지하는 방법은 무엇입니까? - 빠른

  26. 26

    Downloadmanager 클래스로 / databases 폴더에 파일을 다운로드하는 방법은 무엇입니까?

  27. 27

    C '클래스'를 중심으로이 C ++ 래퍼를 일반화하는 방법은 무엇입니까?

  28. 28

    파일로드 순서와 관계없이 다른 파일에서 GAS 클래스를 사용하는 방법은 무엇입니까?

  29. 29

    Swift : 현재 클래스의 다른 클래스에 클래스의 델리게이트를 할당하는 방법은 무엇입니까?

뜨겁다태그

보관