Bonjour à tous (encore une fois), je me questionne sur comment créer un bouton en SFML. Je crois avoir trouvé en grande partie comment faire.
Ma class Button (Bulb pour HealthBulb, mais ce n'est pas très important)
class Bulb
: SFML
.Graphics.Transformable, SFML
.Graphics.Drawable{ private SFML
.Graphics.RectangleShape _BulbContainer
; public event EventHandler BulbClicked
; public Bulb
(SFML
.Graphics.Color Color
) { this._BulbContainer
= new SFML
.Graphics.RectangleShape(new SFML
.System.Vector2f(30,
80)); this._BulbContainer
.FillColor = SFML
.Graphics.Color.Transparent; this._BulbContainer
.OutlineThickness = 1; this._BulbContainer
.OutlineColor = SFML
.Graphics.Color.White; } public void Update
() { if (this._BulbContainer
.GetGlobalBounds().Contains(State1
.MousePosition.X, State1
.MousePosition.Y)) { if (SFML
.Window.Mouse.IsButtonPressed(SFML
.Window.Mouse.Button.Left)) { if (this.BulbClicked != null) { this.BulbClicked(this,
null); } } } } public void Draw
(SFML
.Graphics.RenderTarget target, SFML
.Graphics.RenderStates states
) { states
.Transform *= this.Transform; target
.Draw(this._BulbContent, states
); target
.Draw(this._BulbContainer, states
); }} Ma classe qui utiliser mon Bulb
class GUI
: SFML
.Graphics.Transformable, SFML
.Graphics.Drawable{ private SFML
.Graphics.RectangleShape _Background
; private Widget
.Bulb _HealthBar
; public GUI
() { this._Background
= new SFML
.Graphics.RectangleShape(new SFML
.System.Vector2f(800,
100)); this._Background
.FillColor = new SFML
.Graphics.Color(100,
100,
100); this._HealthBar
= new Widget
.Bulb(SFML
.Graphics.Color.Red); this._HealthBar
.Position = new SFML
.System.Vector2f(100,
10); this._HealthBar
.BulbClicked += new EventHandler
(_HealthBar_BulbClicked
); } void _HealthBar_BulbClicked
(object sender, EventArgs e
) { Console
.Write("HealthBulb.Click"); } //Reste de ma classe inutile pour ma question} Ce que je me demande se situe au niveau de la méthode
Update de ma class
Bulb. Cette méthode vérifie si la sourie est à l'intérieur des limites de mon
Bulb et si c'est le cas, elle vérifie si j'appuie sur le bouton gauche de la souris et si oui, je lève mon événement ce qui, dans la classe
GUI, appellera la méthode
_HealthBar_BulbClicked(object sender, EventArgs e).
J'ai l'impression que ce sera lourd si j'ai plusieurs bouton à gérer sur mon même écran. Je penses à la plupart des jeux qui ont plusieurs bouton (inventaire, map, option, skills 1, skill 2, etc, ouvrir fenêtre de chat et ainsi de suite). Déjà que j'update mon
GUI à chaque boucle pour l'afficher sur mon écran, si en plus dans mon
GUI j'appelle plusieurs update de chaque contrôles (bouton, bulbe de vie, compétence active, etc), qui eux se mettent à jour aussi à chaque boucle pour vérifier si je clique ou non dessus, j'ai l'impression que ce sera lourd pour l'ordinateur, non? À moins que je ne m'y prenne pas de la bonne manière et qu'il y a un moyen beaucoup plus optimisé?
Merci d'avance.
Ah, et mes projets avance. Je devrais bientôt pouvoir vous montrer quelques trucs que j'ai réalisé!