Je me permets de créer un topic sur la création de jeux vidéo en Java car c'est un sujet qui est d'actualité, et j'aimerais vous en faire profiter. Comme vous le savez Java est accusé d'être "lent", et si vous dîtes à un développeur C++ que vous programmez un jeu en Java "il vous rira peut-être" au nez (en tout cas, ça a été mon cas, et ça l'est pour beaucoup de personnes). Ce topic va donc vous présenter trois choses :
sdljava : c'est un binding de la bibliothèque SDL. Avec ce binding vous pouvez utiliser (en plus des fonctions de base de SDL)à :
OpenGL (rendu graphique) ;
SDL_image (images);
SDL_mixer (audio) ;
SDL_ttf (utilisation de polices d'écriture .ttf) ;
SDL_gfx (effets) ;
Un module GUI (interface graphique).
Vous trouverez un tutoriel sur SDLJava sur ce site. Je suis l'auteur de ce tutoriel mais si vous désirez réaliser un vrai jeu, je vous conseil plutôt de vous tourner vers Slick (voir plus bas).
développement 3D
JOGL : un Binding d'OpenGL pour Java, l'installation est très simple et la prise en main est rapide car c'est presque presque identique à la version C. La grosse différence au début sera l'utilisation d'un objet GL et GLU pour avoir accès au méthodes d'OpenGL. Sachez que JOGL s'interface très bien avec AWT, Swing et SWT ;
LWJGL : Nous pouvons parler de Framework, et celui ci est plutôt complet. Vous trouverez donc
un binding d'OpenGL (jusq'au OpenGL 3.3/4.0) (Vidéo) ;
un binding d'OpenAL (Audio) ;
un binding de jinput (Clavier, Souris, Joystick) ;
des classes mathématique (Vector, Matrix) ;
la possibilité d'intégrer tout ce monde dans un contexte AWT/Swing ou dans une applet.
Vous trouverez de la documentation sur le site officiel (en anglais)
Je sais qu'il y a des pros (ou presque) lwjgl sur le forum, si vous voulez que j'ajoute des choses à la liste n'hésiter pas à poster.
Java3D : L'API 3D officiel de Sun, elle est assez abordable et elle est construite au dessus d'OpenGL (cela veut dire que le rendu se fait avec OpenGL). Elle est très simple à installer, javaWebStart ou Installateur (pour Linux et Windows) ou .jar à mettre dans vos projets.
On trouve un tutoriel en français sur cette bibliothèque ici
Gestion du son
JOAL : Le binding d'OpenAL, on ne présente plus cette librairie sonore utilisée dans beaucoup de jeux commerciaux et indépendants ;
JORBIS : Jouer et encoder des sons/musiques au format OGG ;
NativeFMOD : Une bibliothèque audio forte de son succès et largement utilisée dans les dernières productions commerciales ;
L'API audio de Sun : Cette API n'est pas aussi riche que les autres et elle est plus bas niveau. Référencez vous aux commentaires de Quentin C2 pour plus d'information. Vous trouverez les classes dans javax.sound.sampled.* et javax.sound.midi.* ;
QuentinC Sound API : C'est une bibliothèque écrite par un des membre du site. Celle ci à la particularité d'être en pur Java. Elle gère par exemple le streaming, le positionnement 3D et les effets DSP. Cependant comme elle est basée sur l'api sonore du JDK, seuls les formats WAVE, AIFF et AU sont supportés. (Mais vous pouvez utiliser des extensions pour lire d'autres formations (voir son site).
jPCT : Rendu OpenGL, il s'intègre parfaitement à AWT ou Swing ;
3DzzD : C'est un moteur 3D qui inclut un scénographe, un moteur physique, et d'autres outils ;
OctLight : C'est un moteur 3D pour réaliser des MMORPG en Java, il inclus :
Un scénographe
Le rendu OpenGL
Gestion du réseau
Intelligence artificiel
JMonkeyEngine : Rendu OpenGL, Un des moteur les plus utilisés dans le monde du développement de jeux amateurs 3D en Java. La version 3 propose l'intégration de jBullet et NiftyGUI ;
Ardor3D : Rendu OpenGL, à l'origine c'est un fork (un dérivé) de jMonkeyEngine, c'est un moteur qui bouge beaucoup (à surveiller) ;
Expresso3D : Rendu OpenGL pour ce moteur qui se veut léger, il intègre entre autre OpenAL, des outils permettant de détecter les collisions, la gestion des périphérique d'entrée (Clavier, souris), etc...
OGRE4J : Le célèbre moteur 3D Ogre utilisable avec Java (c'est un Binding) ;
JIRR : Binding du moteur Irrlicht pour Java (n'est plus mis à jour)
Crystal Space : Binding du moteur Crystal Space pour Java 1.4+ (n'est plus mis à jour)
Moteur 2D
Slick : permettant la création de Jeux 2D assez facilement. Le framework est construit sur LWJGL (d'ailleurs c'est une dépendance à l'installation) donc vous pouvez aussi l'utiliser dans des applets. Si vous voulez faire un jeu 2D simplement en Java c'est ici qu'il faut se pencher et pas sur SDLJava. Slick contient tout ce dont vous avez besoin pour réaliser des jeux dans de bonnes conditions.
Malheureusement pour certains, toutes ces ressources sont en anglais. Je peux vous assurer que ce n'est pas un anglais compliqué alors ne prenez pas peur et lancez vous
voici un petit bout de code pour vous démontrer à quel point Slick est agréable :
import org.newdawn.slick.AppGameContainer;
import org.newdawn.slick.BasicGame;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.SlickException;
public class SimpleGame extends BasicGame {
public SimpleGame() {
super("Un jeu avec Slick !");
}
public void init(GameContainer gc) throws SlickException {
// Initialisation / Chargement des textures
}
public void update(GameContainer gc, int delta) throws SlickException {
// Mise à jour de la logique du jeu
// Déplacement des personnages, gestion des collisions...
}
public void render(GameContainer gc, Graphics g) throws SlickException {
// Mise à jour de l'affichage
}
public static void main(String[] args) throws SlickException {
AppGameContainer app = new AppGameContainer(new SimpleGame());
app.setDisplayMode(800, 600, false); // Mode fenêtré
app.start();
}
}
Je vous laisse découvrir la suite sur le site officiel. Côté fonctionnement ça ressemble beaucoup à Xna (C#/.net).
PulpCore : C'est un petit moteur que vous pouvez utiliser pour créer des jeux 2D sous forme d'applets ;
Golden T Studios : Un autre moteur 2D qui se veut des plus complets possible et des plus accessible pour la réalisation de jeux 2D de qualité ;
JGame : Voila un petit moteur 2D spécialement conçu pour réaliser des jeux old-school type arcade. Il fonctionne aussi bien sur desktop (Linux, Windows, Mac) que sur Mobile via Java Micro Edition.
Moteur Physique
jBullet : C'est le port java du moteur physique Bullet ;
JOODE : C'est un moteur physique écrit entièrement en Java, celui ci n'est malheureusement plus mis à jour depuis 2006 ;
JPhysX : C'est un binding du célèbre moteur physique développé par Ageia (racheté depuis par NVidia depuis le 13 février 2008).
Intégration et fenêtrage
Ce sont des librairies qui vous permettent de gérer le fenêtrage (boutons, scrollers, widgets spéciaux). Je ne les utilisent pas, je vous propose donc simplement des liens.
Avengina : C'est mon coup de coeur, pour information cette demo tourne sur mon eMac G4 1.42 Ghz avec 1 Go de Ram et une ATI Radeon 9600 Pro 64 Mo DDR, et c'est très beau (sur mes autres machines, c'est encore plus beau), tout ca pour dire : si vous avez une petite configuration n'ayez pas peur ! ça vaut vraiment le coup !
Lien pour télécharger ou visualiser dans une applet
Night Squad 2 : C'est un FPS qui se joue dans une applet. La particularité de ce jeu c'est qu'il ne fonctionne qu'en multi-joueur, il a des graphismes corrects mais ne fonctionne qu'avec Windows...
T.U.E.R. : C'est un FPS encore en développement programmé en Java avec JOGL, d'ailleurs vous pourrez croiser son développeur qui vient sur le forum de temps en temps (coucou julien si t'es là). Les sources sont disponibles et le jeu est jouable via JavaWebStart. Il est encore en phase Alpha mais vu le travail qui a été réalisé je me devais de vous en parler.
Jake2 : Le port de Quake 2 en Java, vous aurez besoin des fichiers du jeu original pour jouer, ou alors lors de l'installation, il vous proposera de télécharger le fichier shareware (tout reste donc légal).
Heli-X : Un simulateur d'hélicoptère radio-commandé
Wakfu : Son petit frère fonctionne sur la plateforme Adobe AIR (avant via le Flash Player) et lui fonctionne en Java avec JOGL. Je ne suis pas un fan de l'univers dofus, mais il faut quand même remarquer que la réalisation est très soignée.
Émulation
Je voudrais présenter une dernière réalisation en Java qui je pense prouve assez bien que ce langage et sa machine virtuelle fonctionne bien, il s'agit d'un émulateur PSP (Playstation Portable) écrit en Java, celui ci utilise JOGL pour le rendu graphique (avec la possibilité d'utiliser les shaders).
Vous pouvez consulter les sources ici, voir quelques captures d'écran là, et télécarger l'émulateur sur google-code. L'émulateur est parfaitement légale (l'émulation est HLE (Hight Level Emulation) et ne requière pas de bios de votre part). Si vous l'utilisez avec des homebrews ou vos jeux c'est parfaitement légal.
En espérant que cela vous soit utile. Amusez vous bien
Le développement de jeu vidéo vous intéresse ? Parlons en !
Tu as oublié de mettre Tribal Trouble dans la liste de jeux, c'est un jeu développé avec LWJGL assez marrent et multijoueur.
Moteur : Aviatrix3D : OpenGL, les performances de Aviatrix3D sont assez proches de jME.
[edit] : J'allais oublier de parler de FengGui, cette Api permet d'intégrer à JoGL/LWJGL/jME une GUI, c'est à dire, créer des boutons des fenêtres des boites à liste, de boites combo, etc...
Merci pour l'apport comme quoi, Java n'est pas fait uniquement pour faire joujoux avec son Nokia ou pour réaliser de superbes application client/serveur. C'est ce que beaucoup de monde pense, et grâce à se topic j'espère bien leurs prouver le contraire, surtout quand on vois Avengina
Le développement de jeu vidéo vous intéresse ? Parlons en !
Et puis il y a aussi Slick permettant la création de Jeux 2D assez facilement, car basé sur LWJGL Slick a été conçu de manière à ressembler à Java2D.
[edit] :
"- LWJGL : Il contient OpenGL, mais ! aussi OpenAL (son), et gère aussi les périphériques d'entrée, tel que le clavier, la souris et les joystiques !"
Dans la rubrique son, tu as oublié qu'on peut aussi utiliser l'API de base de Sun (packages javax.sound.sampled.* et javax.sound.midi.*).
C'est peut-être un peu plus compliqué parce qu'il faut faire pas mal de trucs soi-même, mais quand même.
J'ai hésité à en parler, mais pense tu qu'elle soit adapter pour réaliser un jeu ? avec des solutions comme FMOD, Jorbis ou OpenAL ou placer l'api de sun ? je ne la connais pas, car je ne l'ai jamais utilisée, mais si tu peux débattre un peux sur cette API pourquoi pas
Le développement de jeu vidéo vous intéresse ? Parlons en !
Aucune idée si c'est vraiment adapté pour faire un jeu, mais je ne vois pas où il pourrait y avoir un problème.
Hormis FMOD, je ne connais pas les autres lib de son, et le graphisme ne m'intéresse pas, mais c'était juste une petite remarque en passant.
J'avais parlé il y a déjà un certain temps de faire un tuto sur la JavaSound API, je n'ai encore rien commencé mais je ne sais pas si ce serait très utile au final.
Ce que peut faire la bibliothèque de sun est assez bas niveau et c'est sûr que comparé à FMOD par exemple, c'est assez nul : sans bibliothèque complémentaire il n'y a pas d'effets, les formats supportés sont très peu nombreux, il faut quasiment coder sa routine de mixage soi-même,... à titre de comparaison, pensez aux fonctions proposées par SDL Audio (pas SDL mixer).
Vu que les fonctions sont basiques, on apprend à manipuler plus ou moins directement les données PCM. Alors évidemment c'est pas du son 3D bourré d'effets en tous genres (les matheux à haut niveau, levez-vous), mais didactiquement ça reste intéressant pour en apprendre un peu plus sur comment fonctionne l'audio sans pour autant être un crack en maths.
Du côté du MIDI, on apprend aussi quelques trucs intéressants sur la nature des messages envoyés et ce qu'ils font, mais de nouveau sans bibliothèque additionnelle, le rendu n'est pas terrible... en même temps la banque de sons MIDI de sun fait moins de 500 Ko et est dans un format propriétaire, ceci explique cela.
Bien sur qu'il existe beaucoup de possibilités en Java, le seul problème, c'est que peut les connaissent. Pour beaucoup java est un langage dédier aux technologies Client/Serveur et au petites application graphique et au téléphones portables, alors qu'il peut faire d'autres chose, le C et le C++ ont t'ils été créés pour developper des jeux video ? non ! On peut créer des jeux vidéo de qualité avec Java la preuve avec ce post
Je trouve dommage que quand on parle de Java et des jeux vidéo, on est le droit à de petit jeux 256 couleurs 2D tout moche.. certes, ce sont des jeux et ils ont demander du travail, mais il n'existe pas que ces jeux et java ne se limite pas à ce genre de jeux.
Pour information, il existe deux projets très prometteurs :
jpcsx : un émulateur de PSP écrit en Java, pour l'instant les développeurs bossent sur le noyau du système et ils prévoient d'utiliser jogl pour la solution graphique. Ce projet à démarrer au début des vacances et on y retrouve de très bon codeurs (je pense à shadow, un codeur de l'émulateur PS2 pcsx2). Les sources sont téléchargeables via le dépot svn google code.
jpsx : un émulateur playstation 1 écrit en Java, l'auteur à présenter son projet en 2006 lors d'une conférence Java (on peut d'ailleurs trouver un pdf qui explique tout ca), l'émulateur aujourd'hui commence d'arriver à maturité et niveau performance ca fonctionne assez bien (l'auteur a fait un screenshot ou l'émulateur est lancer 4 fois en même temps avec 4 jeux différents et ca fonctionne bien). Si les sources vous intéresses vous pouvez contacter l'auteur par le forum de ngemu et lui demander (c'est ce que j'ai fait et je l'est ai ). Un dépôt svn sur google code verra bientôt le jour (en réalité il est la mais il n'y a encore rien dedans )
Il existe bien sur d'autres émulateurs écrit en Java, mais ce sont de plus vielles consoles donc je n'en parle pas.
Et pour finir, si vous voulez voir un maximum de jeux en Java vous pouvez allez faire un tour sur sourceforge et faire une recherche dans les jeux java (vous verrez il y a de quoi faire )
Le développement de jeu vidéo vous intéresse ? Parlons en !
Bon alors, je souhaite bientôt me lancer dans la création d'un petit jeu vidéo. Je me demande par conséquent s'il y avait des nouveautés concernant les moteurs 2D, la gestion du son et tout ça. La dernière mise à jour remonte tout de même à près d'un an et demi...
je viens de tomber sur ce topic il est très intérressant, mais bon il est pas facile à trouver donc c'est pas fort utile. Pourquoi ne pas en mettre un lien dans les post-it.
sinon petite correction JBullet n'est pas un binding mais un port. Excepté les binaires de lwjgl pour les démos, c'est du java pur.
Ce qui serait bien, ce serait une liste de tutoriel. Pas férocement pour chaque API, car il en a un sur leur site(dur dur l'anglais, mais faut bien). Mais qui présente différente étape de la conception(liée à la programmation).
J'apprend actuellement le java à travers le développement d'un jeux en 2D.
Je vous fais donc part des tutoriels que j'ai pu trouver qui m'ont appris pas mal de choses :
http://zetcode.com/tutorials/javagamestutorial/
Tutoriel là encore en anglais, qui met à dispositon des codes sources de jeux phares tel que tetris, snake, pacman... Cependant les explications sont très succinctes, il faut donc chercher en parallèle pour bien comprendre.
http://www.supinfo-projects.com/fr/2006/cetd_jeu_2d_java/
Pour finir, un tutoriel en français sur le développement d'un jeux style bomberman.
Ici l'accent est mis sur la conception du projet dans son ensemble et détaille les différentes étapes de développement, de bout en bout.
C'est très bien expliqué, de plus l'intégralité de la source est disponible (avec en prime un diagramme UML, ainsi que la documentation JavaDoc du projet...).
Sinon j'ai aussi entendu parler du framework PulpCore http://www.interactivepulp.com/pulpcore/
Il semblerait qu'ils envisagent de rendre disponible cette librairie sur android (à confirmer).
Attention aux tutos trouvés sur le net sans référence de temps : certains se font très vieillots et donnent de mauvaises habitudes (comme utiliser des Canvas dans une JFrame).
Oui c'est vrai que ces tutos ne sont pas récents, mais ce n'est pas évident de trouver quelque chose qui semble encore d'actualité, surtout lorsque l'on est en phase d'apprentissage du langage et donc pas à même de juger de la qualité du code.
Pourrait tu détailler ce que tu reproche aux méthodes utilisées dans les sources que j'ai cité et/ou proposer des alternatives techniques plus propres, afin que l'on puisse éviter certaines erreurs ?
Je pense, comme je l'ai dit que ce serai une bonne idée !
PS: pour le réseau tu as aussi SpiderMonkey, développer pour le fameux moteur 3D jMonkeyEngine3
Fameux ? Même si il roxe sa mère, c'est toujours en développement, il est loin d'être stable... J'avais pensé faire un tuto dessus, mais bon j'attends qu'une version stable sorte.
Sinon pour l'éventuel tuto, je pense que le format d'article est plus adapté.
Je pense, comme je l'ai dit que ce serai une bonne idée !
PS: pour le réseau tu as aussi SpiderMonkey, développer pour le fameux moteur 3D jMonkeyEngine3
Fameux ? Même si il roxe sa mère, c'est toujours en développement, il est loin d'être stable... J'avais pensé faire un tuto dessus, mais bon j'attends qu'une version stable sorte.
Sinon pour l'éventuel tuto, je pense que le format d'article est plus adapté.
Désolé je voulais parlé du moteur en général (sa version 2/3), et par "fameux" fallais comprendre connus. Sinon pour le tutoriel sur jME, je veux bien t'aider au cas où .