일정 시간이 지나면 알림이 필요한 모든 것을 글로벌 타이머로 만들려고합니다.
예를 들어 게임에서는 버프와 공격 쿨 다운 타이머, 아이템 쿨 다운 등이 있습니다.
개별적으로 관리하는 것은 좋지만 모두 동일한 타이머에서 실행되도록하려면 어떻게해야합니까?
나는 시간이 다되었을 때 단순히 호출되는 값으로 부동 소수점을 키로 사용하고 대리자를 사용하여 SortedList를 사용하려고 시도했지만 관리 할 수없는 것 같습니다. Generic 매개 변수를 사용하여 대리자를 시도했지만 정렬 된 목록에 넣을 수 없습니다.
누구든지 올바른 방향으로 나를 가리킬 수 있습니까?
두 가지 옵션을 지적 할 수 있습니다.
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();
}
}
}
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] 삭제
몇 마디 만하겠습니다