Im essayant de mettre en œuvre un système d'événement pour un jeu, où il y a des classes qui peuvent tirer ou gérer un événement wheter ou non mettre en œuvre ces interfaces:Comment mettre en place un système d'événements
public interface IGameEvent<T> where T : EventArgs
{
event EventHandler<T> OnEvent;
}
public interface IGameHandler<T> where T : EventArgs
{
void OnEvent(object sender, T e);
}
tout avait l'air bien jusqu'à ce que j'ai réalisé qu'aucune classe ne peut mettre en œuvre plus de 1 IGameEvent parce qu'il causerait la déclaration en double,
Voici un exemple:
public class Event
{
public KeyPressEvent OnKeyPress;
public UpdateEvent OnUpdate;
public void AddHadler<T>(IGameEvent<T> eEvent , IGameHandler<T> eHandler) where T : EventArgs
{
eEvent.OnEvent += eHandler.OnEvent;
}
public void RemoveHandler<T>(IGameEvent<T> eEvent, IGameHandler<T> eHandler) where T : EventArgs
{
eEvent.OnEvent -= eHandler.OnEvent;
}
}
keyPressEvent:
public class KeyPressEvent : IGameEvent<KeyPressEvent.KeyPressedEventArgs>
{
public class KeyPressedEventArgs : EventArgs
{
public KeyPressedEventArgs(Keys key)
{
Key = key;
}
public Keys Key { get; private set; }
}
public event EventHandler<KeyPressedEventArgs> OnEvent;
private void OnCheckForKeyPressed() //Example
{
if (OnEvent != null)
OnEvent(this, new KeyPressedEventArgs(Keys.Space));
}
}
serait préférable de stocker manuellement les suscribers dans une liste dans le EventSystem?
À quel point cette approche serait-elle plus lente ou plus rapide?
Merci!