C#如何通过单个计时器通知其他类?

Ji Kwang Yong

我正在尝试创建一个全局计时器,在经过一定时间后需要通知的所有内容。

例如,在游戏中,会有buff,攻击冷却计时器和物品冷却等等。

单独管理它们很好,但是我如何使它们全部在同一计时器上运行?

我尝试过使用SortedList,将浮点数作为键并将委托作为值在时间到时可以简单地调用,但是我似乎无法管理它。尝试了具有泛型参数的委托,但我无法将其放入排序列表中。

谁能指出我正确的方向?

我可以指出2个选择:

  1. TimerControlled使用方法TimerTick(whatever arguments you need)可以根据需要更改其他名称)来创建一个接口((可以更改所有名称)),该接口实现该类的计时器滴答逻辑。在使用计时器相关机制的每个类上实现接口。最后,在您的基础(逻辑)类上,将所有TimerControlled对象添加到一个数组中TimerControlled,以允许您循环访问该数组,并用两行代码调用这些对象的TimerTick方法。

界面:

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,这不是一个很好的选择)静态类(例如)中的静态计时器,这意味着该计时器仅存在1个实例。然后将事件处理程序附加到每个相关类的计时器上,以处理计时器滴答声。

代码:

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

WinForms(C#)仅在通过计时器的每个其他循环上更新PictureBoxes

来自分类Dev

当计时器从 C# 控制台应用程序中的其他类停止时如何返回主程序

来自分类Dev

如何停止在C#类中运行的计时器

来自分类Dev

如何使用计时器导航到电话SDK 8.1(XAML C#)中的其他页面

来自分类Dev

C#如何暂停计时器?

来自分类Dev

如何使用其他功能停止计时器

来自分类Dev

在执行其他命令时运行计时器C ++

来自分类Dev

如何从C#中的其他类通知线程

来自分类Dev

从其他班级停止计时器

来自分类Dev

通过计时器或其他方式生成对象。c#unity 3D

来自分类Dev

如何从其他类及其TextView触发计时器,并分别在另一个xml和类中实现?

来自分类Dev

如何创建倒计时计时器,当我浏览到应用程序的其他页面时该计时器保持不变?

来自分类Dev

C#,WinForms,等待计时器

来自分类Dev

计时器不停止C#

来自分类Dev

C#计时器和内存

来自分类Dev

C#中的延迟计时器

来自分类Dev

c#倒数计时器暂停

来自分类Dev

无法从其他线程启动计时器

来自分类Dev

无法从其他线程停止计时器-移开焦点

来自分类Dev

计时器功能不会接受其他参数

来自分类Dev

在执行其他命令时运行计时器

来自分类Dev

倒数计时器通知

来自分类Dev

我如何在 C# 中编写计时器倒计时?

来自分类Dev

如何循环通过计时器类来延迟时间?

来自分类Dev

Linux,C,如何取消计时器?

来自分类Dev

Linux,C,如何取消计时器?

来自分类Dev

计时器无法在C#中的单独类中工作

来自分类Dev

在C#中不使用计时器类进行调度

来自分类Dev

在单个计时器中处理多计时器

Related 相关文章

热门标签

归档