Hamster_Furtif

Java
Faire des menus (GUIs) en jeu

11 messages dans ce sujet

Bonjour à tous !

Récemment, je me suis dit que je pourrais pas modder minecraft toute ma vie, et qu'il fallait je que je fasse quelque chose de concret. De là m'est venue l'idée de programmer un jeu auquel je jouai sur papier avec des amis au collège.

Tout allais bien, jusquà ce que je décide de faire un écran-titre avec un menu comportant (disons) trois boutons, Solo, Multi, Quitter. Il vas de soi que le bouton Solo doit afficher un sous menu qui permet par exemple, de choisir son personnage.

Dans la théorie, je sais faire. Quelques boutons et le tour est joué.

Malheureusement, je n'ai pas trouvé de manière "propre" de remédier à ce problème, la seule chose que je puisse imaginer consiste en quelques méthodes effaçant le premier GUI pour afficher le second.

Sauf que je trouve que ça craint un peu. J'aimerai faire dans l'idéal une classe pour chaque menu ou catégorie de menu, et me contenter de les instancier (je suis pas sur que je soit le bon terme à employer dans ce cas là) pour afficher le GUI.

Et c'est là que ça bloque: je ne vois pas comment m'y prendre.

C'est pourquoi je serai heureux d'avoir quelques conseils de votre part.

Je suppose que c'est évident, mais peut-être pas tant que ça: j'utilise les JFrame et JPanel pour toute la partie graphique de mon projet.

Si je n'ai pas été clair par endroit, je m'empresserai d'apporter des informations complémentaires.

Merci pour toute l'aide que vous pourrez m'apporter !

PS: Quand je parle de menus, je parle de GUIs, pas des menus déroulant.

-1

Partager ce message


Lien à poster
Partager sur d’autres sites

Hello,

dans Minecraft (et donc avec lwjgl, pas swing), les GUIs (qui sont en fait des classes filles de GuiScreen), sont gérées assez basiquement : un field dans la classe principale du jeu, à changer quand on change de menu, et ce field récupère les inputs depuis la boucle principale et est dessiné en intégralité à chaque tour.

Je suppose que c'est évident, mais peut-être pas tant que ça: j'utilise les JFrame et JPanel pour toute la partie graphique de mon projet.

Ah non, merci de la précision, ça ne l'était pas. :P

Tu voudrais donc essayer de faire un système de GUI avec swing ? Ne suffirait-il pas de changer le contentPane de la JFrame à chaque changement de GUI ?

0

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci beaucoup pour ta réponse !

Après quelques essais, je me rend compte que les JPannels sont trop contraignants à cause du principe de Layouts, qui ne permet pas aux boutons de se redimensionner avec la fenêtre (du moins, c'est ce que j'ai compris).

En sachant que j'ai un niveau disons... moyen, recommande-tu des librairies peut-être un peu plus compliquées, mais moins limitées ?

Que penses-tu par exemple (ou pensez vous pour les autres) de lwjgl ? Est-ce que ça vaut le coup d'apprendre à m'en servir ?

0

Partager ce message


Lien à poster
Partager sur d’autres sites

Après quelques essais, je me rend compte que les JPannels sont trop contraignants à cause du principe de Layouts, qui ne permet pas aux boutons de se redimensionner avec la fenêtre (du moins, c'est ce que j'ai compris).

J'ai pas très bien compris, si les layouts t'embêtent tu peux aussi faire un setLayout(null) sur le JPanel et placer tes boutons manuellement en leur faisant un setBounds().

En sachant que j'ai un niveau disons... moyen, recommande-tu des librairies peut-être un peu plus compliquées, mais moins limitées ?

a dépend pas mal de la complexité du jeu. Déjà, si c'est un jeu en 3D, avec Swing ça va être compliqué. Même pour de la 2D, pour un morpion à la limite, mais ça reste un outil qui n'est pas fait pour ça.

Comme lib pour faire des jeux, je n'en connaît pas tellement, mais je crois que les principales sont LWJGL et LibGDX. Dans les deux cas, ça risque d'être plus compliqué que Swing, parce que plus puissant. Il faudra sans doute que tu apprennes OpenGL, ce qui n'est de toute manière pas un mauvais investissement. Peut-être que LibGDX est un peu moins bas niveau.

Après il y a jME, basé sur LWJGL, qui est pour le coup beaucoup plus haut niveau (même si on ne travaille pas avec, certains de leurs codes sont intéressants et leur wiki est bien fourni).

Que penses-tu par exemple (ou pensez vous pour les autres) de lwjgl ? Est-ce que ça vaut le coup d'apprendre à m'en servir ?

Personnellement, j'en pense beaucoup de bien. Surtout de la v3. Mais de toute manière, apprendre à ce servir de LWJGL, je pense que ça passera aussi et surtout par un apprentissage d'OpenGL, ça prend du temps mais c'est pas du temps perdu ^^

Ensuite, pour faire des GUIs, il existe des bibliothèques. Je ne suis pas utilisateur de LibGDX (tapez pas) donc je ne vais parler que de LWJGL : tu peux créer ton propre « système de GUI » comme Minecraft ( <_<), ou utiliser une des bibliothèques qui existent ( :)) : TWL, nifty-gui, googei, etc.

PS : si tu lances dans OpenGL, apprend l'OpenGL moderne (>= v3)! ;)

0

Partager ce message


Lien à poster
Partager sur d’autres sites

Si japprends l'OpenGL, ça pourra me servir ailleurs qu'en Java je suppose ? Parce que je compte bien essayer d'autres langages. Du coup, si c'est pour faire 2-3 jeux pourris, c'est pas la peine.

En attendant d'être fixé là dessus, je vais avancer mon projet au max en faisant tout ce qui n'as pas besoin d'interface graphique. :)

0

Partager ce message


Lien à poster
Partager sur d’autres sites

Bah honnêtement lwjgl est un bon choix mais faire son engine pour un petit jeu ça peut être assez long et décourageant. Libgdx est vraiment sympa, inclus pas mal de truc haut niveau tout en te laissant accès au bas niveau. Après pour la 3d jme m'a l'air assez balaise mais c'est vraiment haut niveau.

Bon je me répète un peu avec wytrem et j'en suis désolé.

Perso je suis un grand fan de libgdx que je te conseille vivement. Après l'opengl peut vraiment être intéressant mais faut pas se decourager.

Et pour dernier argument, libgdx excele dans la multi compatibilité et avec ton même code permet de distribuer ton application en desktop (tout os of course), en mobile (Android & iOS ) ainsi que html5(avec quelques contraintes par contre)

0

Partager ce message


Lien à poster
Partager sur d’autres sites

Bon, vu que ce que je veux faire est vraiment un tout petit jeu, je vais essayer LWJGL.

Je crois.

Je pourrais Googler ça mais je trouve ça plus sympa de discuter sur un forum, donc voilà:

Comment je fait pour ajouter la librairie à mon projet ? a me propose d'overwrite ce que j'ai fait et c'est pas une idée qui me plait des masses.

0

Partager ce message


Lien à poster
Partager sur d’autres sites

Si tu as commencé à écrire ton code avec Swing, il vaudrait mieux refaire depuis le début, c'est vraiment Swing ou LWJGL, pas un mix des deux. :P

0

Partager ce message


Lien à poster
Partager sur d’autres sites

Pour l'instant, j'ai rien fait à part ouvrir une fenêtre qui affiche deux trois trucs que j'utilisais pour vérifier mon code, mais sinon y'a rien.

Mais en fait, j'ai une question: est-ce que c'est swing qui est particulièrement contraignant, ou est-ce que c'est faire une interface graphique qui est comme ça ?

0

Partager ce message


Lien à poster
Partager sur d’autres sites

Mais en fait, j'ai une question: est-ce que c'est swing qui est particulièrement contraignant, ou est-ce que c'est faire une interface graphique qui est comme ça ?

Je sais pas trop, je pense que c'est un peu les deux. Pour avoir créé mon propre système d'interfaces dans Minecraft, je trouve qu'on peut faire plus légèrement que Swing à certains moments, mais qu'il y a quand même de très bonnes idées. Même si tu fais un système d'interfaces 100% lwjgl, ça reste une petite uzine à gaz, mais qui, contrairement à Swing, est adaptable : tu peux faire un petit truc léger si tu n'as besoin que d'un petit truc léger (comme des boutons sur un menu).

Attention à ne pas confondre, quand je pense que Swing est contraingnant c'est uniquement pour faire des jeux, sinon je trouve ça plutôt bien ! :D

1

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !


Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.


Connectez-vous maintenant