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

SFML Discussion :

[DEBUTANT] Diverses Questions


Sujet :

SFML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Avril 2010
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 356
    Par défaut [DEBUTANT] Diverses Questions
    Bonjour a tous, je de passer de SDL a SFML aujourd'hui et j'ai plusieurs questions :

    -Lorsqu'on passe de mode fenêtré a plein écran, est on obligé de détruire la fenêtre ? (Il me semble que la méthode create détruit ma fenêtre puis la reconstruit). Ceci à le défaut de faire un flash pas très agréable.

    -Y a t-il l'équivalent d'un Blit en SDL ? J'ai cherché, et il me semble que l'on est obligé de Draw sur la RenderWindow. (Cette question est juste pour mes projets futurs)

    -En dernier, peut-on désactiver le "auto zoom" lors d'un évènement resize ? (sans se fatiguer avec les vues OpenGL) cad : Lors d'un resize, les objets ne sont pas automatiquement étirés.

    Merci de répondre à mes questions. Cette Bibliothèque surpasse toutes celles que j'ai essayées mis a part sur la gestion des event ou je la trouve on peu légère.

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 157
    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 157
    Billets dans le blog
    152
    Par défaut
    Bonjour,

    Moi je ne suis pas encore passer à la SFML, mais il me semblait possible de répondre à quelques points.

    Citation Envoyé par NoIdea Voir le message
    -Lorsqu'on passe de mode fenêtré a plein écran, est on obligé de détruire la fenêtre ? (Il me semble que la méthode create détruit ma fenêtre puis la reconstruit). Ceci à le défaut de faire un flash pas très agréable.
    J'ai encore vu aucune programme passer entre les deux modes sans flash, donc je pense que oui, on est oublier de faire cette étape de destruction / recréation.

    -Y a t-il l'équivalent d'un Blit en SDL ? J'ai cherché, et il me semble que l'on est obligé de Draw sur la RenderWindow. (Cette question est juste pour mes projets futurs)
    Je pense que c'est le draw ( car le blit de la SDL était souvent utilisé pour juste copier une surface sur l'écran )

    Note: L'auteur de la SFML surveille quelque fois ce forum
    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.

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Avril 2010
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 356
    Par défaut
    Quand je disais blit je voulais dire blit Image/Image ou Sprite/Sprite et non Sprite/Ecran. Merci pour cette précision au niveau du "flash".

    [EDIT]

    J'ai encore vu aucune programme passer entre les deux modes sans flash, donc je pense que oui, on est oublier de faire cette étape de destruction / recréation.
    Je ne sais pas si il y a réellement un passage en plein écran d'un point de vue hardware, mais quand je fais (sur mozilla firefox) Affichage->plein écran ou F11, je n'ai pas de flash et j'ai bel et bien La barre de titre (avec la croix) qui disparait ainsi que la barre des taches.

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 157
    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 157
    Billets dans le blog
    152
    Par défaut
    Ce que vous dites pour firefox, c'est juste qu'il enlève certaine spécificité de la fenêtre ( la barre des titres, et des menus ... ) après, y a pas de changement de résolution ( je veux dire, que d'un point de vue technique il est toujours en windowed, sauf qu'il occupe tout l'écran ( ou presque )
    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.

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    En effet, le vrai mode plein écran n'a rien à voir avec certaines applications qui ne font que retirer les bordures et maximiser leur fenêtre. Ce qui flashe, c'est le changement de résolution : si tu utilises la même résolution que ton bureau normalement ça devrait être plus "smooth".

    -Y a t-il l'équivalent d'un Blit en SDL ? J'ai cherché, et il me semble que l'on est obligé de Draw sur la RenderWindow. (Cette question est juste pour mes projets futurs)
    Dans SFML 1 tu peux copier des pixels d'une image sur une autre, avec la fonction Image::Copy.
    Dans SFML 2, tu peux faire du vrai rendu sur image avec la classe RenderImage.

    -En dernier, peut-on désactiver le "auto zoom" lors d'un évènement resize ? (sans se fatiguer avec les vues OpenGL) cad : Lors d'un resize, les objets ne sont pas automatiquement étirés.
    Il suffit de redimensionner la vue courante à chaque évènement Resized, pour qu'elle soit toujours de la même taille que la fenêtre. Tu devrais trouver un exemple dans la doc ou sur le forum officiel.

  6. #6
    Membre éclairé

    Profil pro
    Inscrit en
    Avril 2010
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 356
    Par défaut
    Merci pour ces réponses, mais peut-on avec la SFML supprimer les bordures et imiter Firefox pour le mode pleine écran (cad ne pas faire un plein écran).
    Toutefois, quand je regarde la méthode de redimensionnement de mon IDE, je remarque qu'elle est progressive :
    Aujourd'hui, avec la SFML, lorsqu'on Resize la fenêtre, l'évènement n'est émit que lorsque l'utilisateur relâche la souri.
    Avec mon IDE (CodeBlocks), le redimensionnement est progressif : l'évènement resize doit être émit alors qu'on n'a pas encore relâcher la souri car on voit le redimensionnement de la fenetre avant même d'avoir relacher la souri.
    Est-ce possible avec la SFML ?

    [EDIT] J'ai remarquer que l'évènement resize apparaissais de nombreuses fois une fois avoir redimensionner la fenetre :
    Par exemple, si je prend 5 secondes pour redimensionner ma fenêtre, une fois l'avoir redimensionner (donc pas durant le redimensionnement), j'obtiens X >5 évènement resize. Si je prend 10 secondes, j'aurais env 2X evenement resize.

    Pourquoi ces évènements ne sont-ils pas émis durant le redimensionnement ?
    Quelle est l'utilité d'avoir une pile d'évènement identiques en même temps?

    Je vous montre le code qui créer ce phénomène :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    void app::wait()
    {
        //Les emit sont des fonctions qui me sont propre.
        //Les optimisations, propreté du code et fonctionnement du code n'est pas la partie qui m'intéresse.
        sf::Event event;
        exit=false;
        while(!exit)
        {
            while(screen.GetEvent(event))
            {
                switch(event.Type)
                {
                    case sf::Event::Resized :
                        std::cout<<"resize";
                        emit("resize");
                        break;
                    case sf::Event::GainedFocus :
                        std::cout<<"gained";
                        emit("gained_focus");
                        break;
                    case sf::Event::LostFocus :
                        std::cout<<"lost";
                        emit("lost_focus");
                        break;
                    case sf::Event::TextEntered :
                        emit("character",Evenement<Uint32>(event.Text.Unicode));
                        break;
                    case sf::Event::KeyPressed :
                        emit("keyboard", Evenement<bool, Key::Code, bool,bool,bool>(true,event.Key.Code,event.Key.Alt,event.Key.Control,event.Key.Shift));
                        break;
                    case sf::Event::KeyReleased :
                        emit("keyboard", Evenement<bool, Key::Code, bool,bool,bool>(false,event.Key.Code,event.Key.Alt,event.Key.Control,event.Key.Shift));
                        break;
                    case sf::Event::MouseButtonPressed :
                        emit("mouse_button", Evenement<bool, sf::Mouse::Button, int,int>(true,event.MouseButton.Button,event.MouseButton.X,event.MouseButton.Y));
                        break;
                    case sf::Event::MouseButtonReleased :
                        emit("mouse_button", Evenement<bool, sf::Mouse::Button, int,int>(false,event.MouseButton.Button,event.MouseButton.X,event.MouseButton.Y));
                        break;
                    case sf::Event::MouseMoved :
                        emit("mouse_motion", Evenement<unsigned int,unsigned int>(event.MouseMove.X,event.MouseMove.Y));
                        break;
                    case sf::Event::Closed :
                        emit("window_quit");
                        break;
                    default :
                        break;
                }
            }
        }
        emit("application_closed");
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 18
    Dernier message: 04/04/2006, 14h31
  2. [Debutant] Nouvelle question sur les pointeurs
    Par etiennegaloup dans le forum Débuter
    Réponses: 3
    Dernier message: 11/01/2006, 09h55
  3. C++ diverses questions concernant directX
    Par TERRIBLE dans le forum DirectX
    Réponses: 5
    Dernier message: 05/10/2005, 23h09
  4. [debutant STL] question sur les vectors
    Par killerjeff dans le forum SL & STL
    Réponses: 13
    Dernier message: 19/08/2004, 17h32
  5. Diverse question ...
    Par Dims dans le forum Développement
    Réponses: 11
    Dernier message: 13/01/2004, 15h29

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