如何使事件调用 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 !!");
}
}
所以一步一步来:
- 创建一个委托,它是您的事件和事件触发时您想要 运行 的代码之间的桥梁。您将参数提供给委托,它们是 (object sender, EventArgs e) - 在本例中,发送者是字符 class,参数用于发送其他信息 - 例如字符类型。
- 创建我们委托类型的事件
- 在我们的函数 IsOverlapping() 中,您将进行逻辑检查是否发生重叠。如果有,则启动事件。您应该首先检查是否有任何与事件相关的东西(因此是 if (OverlappingEvent != null))——如果有的话,启动事件。
- 在 Main() 中,您创建了 class 的实例,并且...
- 将您的事件处理程序订阅给它,这样当事件被触发时应该执行的代码。我连接了两个方法,只是为了说明你可以订阅多个。
现在当你 运行 c.IsOverlapping() 时会发生这样的事情:
- 您检查重叠 运行 的逻辑,
- 如果有重叠,将检查 OverlappingEvent 是否订阅了代码(它在 Main() 中订阅),
- 如果确实如此,将触发事件,
- 代码订阅了事件 运行s - 在本例中是您在 Main() 中的代码。
您可以将其编译为控制台应用程序,它将显示 2 行:
We have overlapping here!!
Seriously, we have overlapping !!
希望对您有所帮助。
这个问题可能被问过好几次了,但我不知道要搜索什么..
无论如何。我有一个名为 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 !!");
}
}
所以一步一步来:
- 创建一个委托,它是您的事件和事件触发时您想要 运行 的代码之间的桥梁。您将参数提供给委托,它们是 (object sender, EventArgs e) - 在本例中,发送者是字符 class,参数用于发送其他信息 - 例如字符类型。
- 创建我们委托类型的事件
- 在我们的函数 IsOverlapping() 中,您将进行逻辑检查是否发生重叠。如果有,则启动事件。您应该首先检查是否有任何与事件相关的东西(因此是 if (OverlappingEvent != null))——如果有的话,启动事件。
- 在 Main() 中,您创建了 class 的实例,并且...
- 将您的事件处理程序订阅给它,这样当事件被触发时应该执行的代码。我连接了两个方法,只是为了说明你可以订阅多个。
现在当你 运行 c.IsOverlapping() 时会发生这样的事情:
- 您检查重叠 运行 的逻辑,
- 如果有重叠,将检查 OverlappingEvent 是否订阅了代码(它在 Main() 中订阅),
- 如果确实如此,将触发事件,
- 代码订阅了事件 运行s - 在本例中是您在 Main() 中的代码。
您可以将其编译为控制台应用程序,它将显示 2 行:
We have overlapping here!!
Seriously, we have overlapping !!
希望对您有所帮助。