如何使事件调用 holder class 函数

How to make event calling holder class function

这个问题可能被问过好几次了,但我不知道要搜索什么..

无论如何。我有一个名为 Character 的 class。在它里面我想要一个我称之为 RectangleCollision 的碰撞组件。它里面有一个名为 IsOverlapping 的函数,用于检查重叠。

我想要一个可以为每个游戏对象修改的函数。例如创建一个名为 OnBeginOverlap() 的函数;每次碰撞组件检测到碰撞时都会触发。

有什么方法可以将此函数绑定为委托或事件吗?或者什么?

您必须阅读有关事件和委托的内容。网上有很多例子。当我试图理解这个主题时,我设法找到的最简单的是:

The Simplest C# Events Example Imaginable

您还可以查看以下内容(您可以将其编译为控制台应用程序):

class Character
{

    public delegate void OverlappingHandler(Character character, EventArgs e);
    public event OverlappingHandler OverlappingEvent;
    public void IsOverlapping()
    {
        bool overlapping = true;

        if (overlapping)
        {
            if (OverlappingEvent != null)
            {
                OverlappingEvent(this, null);
            }
        }
    }

}

class Program
{
    static void Main(string[] args)
    {
        Character c = new Character();
        c.OverlappingEvent += OverlappingEventHandler;
        c.OverlappingEvent += OverlappingSecondEventHandler;

        c.IsOverlapping();

        Console.Read();
    }

    static void OverlappingEventHandler(Character character, EventArgs e)
    {
        Console.WriteLine("We have overlapping here!!");
    }

    static void OverlappingSecondEventHandler(Character character, EventArgs e)
    {
        Console.WriteLine("Seriously, we have overlapping !!");
    }
}

所以一步一步来:

  1. 创建一个委托,它是您的事件和事件触发时您想要 运行 的代码之间的桥梁。您将参数提供给委托,它们是 (object sender, EventArgs e) - 在本例中,发送者是字符 class,参数用于发送其他信息 - 例如字符类型。
  2. 创建我们委托类型的事件
  3. 在我们的函数 IsOverlapping() 中,您将进行逻辑检查是否发生重叠。如果有,则启动事件。您应该首先检查是否有任何与事件相关的东西(因此是 if (OverlappingEvent != null))——如果有的话,启动事件。
  4. 在 Main() 中,您创建了 class 的实例,并且...
  5. 将您的事件处理程序订阅给它,这样当事件被触发时应该执行的代码。我连接了两个方法,只是为了说明你可以订阅多个。
  6. 现在当你 运行 c.IsOverlapping() 时会发生这样的事情:

    • 您检查重叠 运行 的逻辑,
    • 如果有重叠,将检查 OverlappingEvent 是否订阅了代码(它在 Main() 中订阅),
    • 如果确实如此,将触发事件,
    • 代码订阅了事件 运行s - 在本例中是您在 Main() 中的代码。

您可以将其编译为控制台应用程序,它将显示 2 行:

We have overlapping here!!

Seriously, we have overlapping !!

希望对您有所帮助。