【发布时间】:2018-11-09 04:40:28
【问题描述】:
我正在开发一个游戏,其中包含一些用于不同任务的管理器,例如碰撞检测等。一旦检测到碰撞,受此碰撞影响的每个游戏对象都应该引发 OnCollided 事件,这样我就可以轻松播放声音,制作对象消失,打开一扇门或其他任何东西,但如果不从CollisionSystem 引发事件,而不是让每个GameObject 引发自己的事件,我就无法获得这种行为。
这是一个简化的例子,希望它有意义:
Class CollisionSystem
{
// It is called when a collision has been detected between two objects (code not included)
public void HandleCollision(GameObject gameObject1, GameObject gameObject2)
{
//Do whatever
//How can trigger each corresponding game object event from here?
}
}
Class GameObject
{
protected event GameEventHandler Collided;
protected void OnCollided(GameEventArgs e)
{
if (Collided != null)
Collided(this, e);
}
}
我已经测试了诸如公开 OnCollided 方法之类的东西,但是应该从类内部引发事件......而且,另一方面,游戏对象本身无法确定它何时发生碰撞,原因,好吧,这就是CollisionSystem 所做的。
提前致谢。
【问题讨论】:
-
请修复代码格式,它让我的强迫症感到不安,一个智能捆绑游戏开发绝地应该没有问题
-
就我在这里看到的情况而言,您的做法是错误的。
OnCollided不应该引发事件,而是监听 CollisionSystem 引发的OnCollided事件。但是,您希望能够将其提升为仅处于冲突中的对象,而不是所有订阅该事件的对象。 -
从
CollisionSistem调用GameObject中的公共方法(应该是带有y 的“系统”,除非它不是英语)然后引发事件? -
抱歉,我是盲人,我很难在这里格式化代码,TheGeneral。
标签: c# events refactoring