我正在开发一个游戏,其中包含一些管理员,用于不同的任务,如碰撞检测等。一旦检测到碰撞,受此碰撞影响的每个游戏对象都应该引发CREATE OR REPLACE VIEW selected_states AS
SELECT *, 2017 AS year FROM states2017
UNION ALL SELECT *, 2018 AS year FROM states2018
AS s
JOIN properties p ON s.propertyID = p.propertyID WHERE p.userID=1
事件,这样我就可以轻松播放声音,让对象消失,打开一扇门或其他什么,但如果不从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
的作用。
提前致谢。
答案 0 :(得分:0)
好的,我能提出的应该体现你想要做的事情:
public class CollisionSystem
{
Public void HandleCollision(IGameObject[] objects)
{
foreach (IGameObject obj in objects)
{
//call the function that tells the object it collided
obj.CollisionDetected()
}
}
}
您希望您的游戏对象实现一个界面
public interface IGameObject
{
public void CollisionDetected()
}
这意味着你的gameobject-class看起来像这样;
public class GameObject : IGameObject
{
//constructors, params, whatever
public void CollisionDetected()
{
//play some sound, remove object, whatever
}
}
事情是;我不知道是什么引发了碰撞事件。
编辑,所以我重读了你的问题,看到你提到它已经开始从物理引擎调用了。无论在哪里/然而如果你在物理引擎课程中声明了你的CollisionSystem
,你可以从那里调用HandleCollision()
- 方法并且你是完整的圆圈。