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

 C Discussion :

[Ez_Draw] Ouvrir deux fenêtres.


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 43
    Par défaut [Ez_Draw] Ouvrir deux fenêtres.
    Salut à les codeurs !

    Je suis en train de créer un petit jeu sur Ez_draw et j'aimerais bien qu'une fenêtre s'affiche pour que le joueur puisse consulter les commandes lorsqu'il clique sur "a".

    Voici comment j'ai procédé :

    Dans mon code il y a un grosse structure game qui contient (les images du terrain, le terrain lui même, l'inventaire, ...) la voici :
    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
    typedef struct {
        /** @brief État courant */
        State state; 
        /** @brief Inventaire */
        Inventaire inventaire;
        /** @brief Indice du matériau courant dans l'inventaire */ 
        int selection; 
        /** @brief Tableau des règles de crafting */
        Regle* regles; 
        /** @brief Taille du tableau de règles */
        int* num_regles; 
        /** @brief Indice de la règle courante */
        int regle_selectionnee;
        /** @brief Terrain de jeu */ 
        GigaTerrain Gigaterrain; 
        /** @brief Position du personnage */
        Personnage* personnage; 
        /** @brief Tableau des images des matériaux */
        Ez_image* tiles[NB_MATERIAUX];
        /** @brief Image du personnage */ 
        Ez_image* character; 
    	/** @brief selection dans l'inventaire */ 
    	int* position_inventaire;
    	/** @brief Image du fond du jeu*/
    	Ez_image* weather;
    	/** @brief Image du fond de la fenêtre*/
    	Ez_image* fond;
            /** @brief createur de fenêtre(s)*/
    	Ez_event** evi;
    } Game;
    Vous remarquerez à la fin le nouveau champs "evi" que je viens de créer pour pouvoir créer de nouveaux événements qui je l'espère me permettront d'afficher une nouvelle fenêtre et même de la détruire sans affecter la première.

    Puis j'ai initialisé tel que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    /* Initialisation des events */
        game_parameters->evi = calloc(sizeof(Ez_event**),1);
     
        game_parameters->evi[0] = calloc(sizeof(Ez_event*),1);
     
        game_parameters->evi[0]->win = calloc(sizeof(Ez_window),1);

    Enfin j'ai pu envoyé la sauce en récupérant les infos dans games :

    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
    void win_cmd_on_expose(Ez_event *ev)
    {
        Game* game = (Game*) ez_get_data(ev->win);
     
        int i, w, h;
        ez_window_get_size (game->evi[0]->win, &w, &h);
     
        ez_draw_text (game->evi[0]->win, EZ_TC, w/2, h/2,
                      "\nm : Pour miner (i.e récupérer un matériau du décor)"
                      "\np : Pour placer (i.e placer un matériau de l'inventaire sur le terrain)"
                      "\nc : Pour crafter (c'est à dire)"
                      );
     
        return;
    }
     
    void win_cmd_on_key_press(Ez_event *ev)
    {
        Game* game = (Game*) ez_get_data(ev->win);
     
        switch (game->evi[0]->key_sym){
            case XK_q :
                ez_window_destroy (game->evi[0]->win);
            break;
        }
        return;
    }
     
    void win_cmd_event(Ez_event *ev)
    {
        Game* game = (Game*) ez_get_data(ev->win);
        switch (game->evi[0]->type){
            case Expose      : win_cmd_on_expose       (game->evi[0]); break;
            case KeyPress    : win_cmd_on_key_press    (game->evi[0]); break;
        }
        return;
    }
     
    void dessine_infos(Ez_event *ev)
    {
        Game* game = (Game*) ez_get_data(ev->win);
        game->evi[0]->win = ez_window_create(550,440, "Fenetre de commande", win_cmd_event);
        return;
    }

    Mais bien sur mon jeu crashe dès que la fenêtre apparaît (elle ne se remplit même pas). Du coup je souhaiterais savoir si je suis sur le bon chemin ? Ou si il y a d'autres manière plus adaptée à mon problèmes ? Qu'en dites-vous ?

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


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

    Pourquoi faire un double pointeur sur EZ_Event alors que vous n'utilisez qu'une seule case du tableau ? Autant être direct et n'avoir qu'un EZ_Window et je pense que cela simplifiera le code.
    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 actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 43
    Par défaut
    Pensez vous que mon post aurait plus de réponses dans votre rubrique ?

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 136
    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 136
    Billets dans le blog
    150
    Par défaut
    Pas nécessairement, sinon, je l'aurais déplacé
    Pour déboguer votre crash, vous pouvez suivre ce cours sur le débogage.

    Mais bon, mon premier conseil est bon : évitez au maximum la complexité et les pointeurs
    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
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Patience, c'est dimanche !

    Tu initialises un pointeur de type T * (pour pointer sur un T, donc) avec un bloc mémoire de taille sizeof(T *), je ne pense pas que cela soit ton objectif.

    Comme LittleWhite, je te recommande d'éviter les indirections inutiles le temps d'avoir une base qui fonctionne. Tu pourras toujours améliorer le code et y ajouter de la complexité par la suite.

  6. #6
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 43
    Par défaut
    J'ai essayé de simplifier mon code.

    J'ai donc seulement créer un champs Ez_window win_cmd.

    Puis dans le main j'ai codé ainsi :
    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
    void win_cmd_on_expose(Ez_event *ev)
    {
        Game* game = (Game*) ez_get_data(ev->win);
     
        int w, h;
        ez_window_get_size (game->win_cmd[0], &w, &h);
        ez_draw_text (game->win_cmd[0], EZ_TC, w/2, h/2,"\nm : Pour miner (i.e récupérer un matériau du décor)");
     
        /*"\np : Pour placer (i.e placer un matériau de l'inventaire sur le terrain)"
                      "\nc : Pour crafter (c'est à dire)"*/
     
        return;
    }
     
    void win_cmd_close(Ez_event *ev)
    {
        Game *game = ez_get_data (ev->win);
        ez_window_destroy (game->win_cmd[0]);
    }
     
    void win_cmd_event(Ez_event *ev)
    {
        Game* game = (Game*) ez_get_data(ev->win);
        switch (ev->type){
            case Expose      : win_cmd_on_expose       (ev); break;
            case WindowClose : win_cmd_close           (ev); break;
        }
        return;
    }
     
    void dessine_infos(Ez_event *ev)
    {
        Game* game = (Game*) ez_get_data(ev->win);
        game->state = state_win_cmd;
        game->win_cmd[0] = ez_window_create(550,440, "Fenetre de commande", win_cmd_event);
     
        return;
    }

Discussions similaires

  1. [XL-2010] ouvrir excel dans deux fenêtres séparées
    Par UDSP50 dans le forum Excel
    Réponses: 5
    Dernier message: 15/05/2015, 12h57
  2. [XL-2010] Ouvrir deux excel en fenêtres séparées
    Par olibara dans le forum Excel
    Réponses: 9
    Dernier message: 29/08/2013, 10h54
  3. Est-il possible d'ouvrir deux fenêtres simultanément ?
    Par Go'Gaule dans le forum Débuter
    Réponses: 2
    Dernier message: 18/08/2011, 10h50
  4. Réponses: 4
    Dernier message: 03/08/2011, 19h03
  5. [Lazarus] Ouvrir deux fenêtres successivement
    Par nnniii dans le forum Lazarus
    Réponses: 2
    Dernier message: 09/04/2007, 19h02

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