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 :
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.
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;
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 ?
Partager