IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SDL Discussion :

Création d'une interface graphique


Sujet :

SDL

  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    641
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 641
    Par défaut Création d'une interface graphique
    Bonjour,

    Pour les besoins d'un jeu je développe un GUI simple avec SDL (1.2).

    J'ai différentes classes représentant les différents types d'éléments (fenêtre, bouton, ...) étendent une classe abstraite GUIObject.

    Chaque éléments dispose d'une méthode Render et de méthodes MouseButtonDown, MouseButtonUp, MouseMoved... pour gérer les événements.

    Code pseudo-code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class GUIObject :
        //position
        Left: int
        Top: int
        Width: int
        Height: int
     
        function IsIn(X, Y) : Boolean //permet de vérifier si le point (X, Y) est dans la zone du composant
     
        //méthodes abstraites
        procedure Render() 
        procedure MouseButtonDown(Button, X, Y) 
        procedure MouseButtonUp(Button, X, Y) 
        procedure MouseMoved(Button, X, Y, XRel, YRel)

    La classe GUIContainer est un élément qui peut contenir une liste d'éléments enfants (ex. fenêtre, panel, boîte de dialogue...) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class GUIContainer
        Objects[]
     
        Add(Object)
        procedure MouseButtonDown(Button, X, Y) 
        procedure MouseButtonUp(Button, X, Y) 
        procedure MouseMoved(Button, X, Y, XRel, YRel)
    Pour la gestion des événements, j'hésite entre deux approches :

    1) le GUIContainer vérifie si toutes les conditions sont remplies et si la souris est positionné sur le composant avant de lui transmettre l'événement. Si le composant destinataire de l'événement (ex. : le bouton sur lequel on a cliqué) est identifié, on sort de la boucle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class GUIContainer extends GUIObject :
        procedure MouseButtonDown(Button, X, Y) 
            for each Object in Self.Objects :
                if Object.IsVisible and Object.IsIn(X, Y) and Object.IsEnabled then
                    Object.MouseButtonDown(Button, X, Y)
                    Break // Arrêt de la boucle.
    Avantages : Cela simplifie le code des composants.
    Inconvénient : J'ai peur que cela manque de flexibilité pour gérer des comportements complexes (glisser-déposer...).

    2) Le GUIContainer se contente de transmettre l'événement à tous ses enfants sans réfléchir.
    L'intelligence est du côté du composant, qui vérifie le positionnement de la souris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    class GUIContainer :
        procedure MouseButtonDown(Button, X, Y) 
            for each Object in Self.Objects :
                Object.MouseButtonDown(Button, X, Y) 
     
    class GUIButton extends GUIObject :
        procedure MouseButtonDown(Button, X, Y) 
            if Visible and IsIn(X, Y) then
        //...
    Selon vous quelle serait la meilleure approche ?

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 115
    Billets dans le blog
    147
    Par défaut
    Bonjour,

    En voyant comment Qt gère ses événements, je partirai plutôt sur la seconde possibilité et chaque enfant peut dire s'il accepte ou refuse l'événement. Ainsi, on peut aussi éviter de parcourir trop longtemps l'arbre des composants, alors que l'événement a déjà été traité.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Discussions similaires

  1. Création d'une interface graphique un peu poussée
    Par Ivenoproblemwiththat dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 04/01/2008, 16h00
  2. Création d'une interface graphique
    Par sieuzac dans le forum Développement 2D, 3D et Jeux
    Réponses: 14
    Dernier message: 30/05/2007, 20h43
  3. création d'une interface graphique
    Par dz_robotix dans le forum Linux
    Réponses: 1
    Dernier message: 18/04/2007, 11h52
  4. [Swing] Création d'une interface graphique SWING + MVC
    Par Sylmandel dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 21/04/2006, 09h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo