Près d'un an plus tard, et presque par hasard, je crois que j'ai enfin réussi à comprendre ta deuxième méthode!
Si cela peut éventuellement aider quelqu'un, voici mon code.
Ma classe abstraite de laquelle je créé mes différents éléments à afficher.
public abstract class GUIElement : SFML.Graphics.Transformable, SFML.Graphics.Drawable
{
public abstract void Draw(RenderTarget target, RenderStates states);
public abstract void Event(KeyEventArgs keyEventArgs);
}
Une classe dérivé qui utilise ma classe abstraite.
public class GUICombat : GUIElement
{
private SFML.Graphics.RectangleShape _Background;
public GUICombat()
{
//...
}
public override void Draw(RenderTarget target, RenderStates states)
{
states.Transform *= this.Transform;
target.Draw(this._Background, states);
foreach (GUICombatCharacter guic in this._Character)
{
target.Draw(guic, states);
}
target.Draw(this._SelectionIcon, states);
}
public override void Event(KeyEventArgs keyEventArgs)
{
switch (keyEventArgs.Code)
{
case Keyboard.Key.Up:
//...
break;
}
}
}
Je passe mon keyEventArgs à mon objet et je peux définir ce qui se passe en fonction de l'événement. Étais-ce bien cela que tu voulais dire par «2. Gérer les évènements SFML dans GameEngine et les transmettre au State courant via des fonctions virtuelles.»?