Partage
  • Partager sur Facebook
  • Partager sur Twitter

Les outils pour la création de Jeux Video en Java

19 octobre 2010 à 13:08:26

Bonjour à tous,

Edit : C'est une reconstruction du sujet pour qu'il soit mis en post-it.

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 :
  • De bonnes bibliothèques
  • Quelques Moteurs (3D, Physique, etc..)
  • Des exemples de très beaux jeux réalisés en Java

Contributeurs : demonixis, colibri, QuentinC 2, gouessej, Kedare, Topoxy, Toggy

Cette liste est loin d'être exhaustive, n'hésitez pas à proposer de nouvelles choses (avec des liens de préférence).

Les bibliothèques


Développement 2D


  • LibGDX
  • Java2D : Est inclue dans le JDK (voir le tutoriel de Cysboy) ;
  • 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).

Travailler sur les images



Le réseau


  • Netty
  • Project Darkstar : Cette API vous permettra de développer des applications serveur pour vos MMORPG ou monde persistants ;
  • Java Game Networking : Une API pour gérer le réseau dans votre jeu ;
  • Kryonet : Une bibliothèque de communication réseau (TCP et UDP). Celle ci fonctionne aussi bien sur PC que sur Android ;
  • SpiderMonkey: Une autre bibliothèque de communication réseau, elle est principalement utilisée dans le moteur JavaMonkeyEngine .
    • Vous trouverez de la documentation sur son utilisation ici.

Moteurs


Moteur d'affichage 3D


  • Aviatrix3D : Rendu OpenGL assez proche de JMonkeyEngine coté performances ;
  • 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) ;
  • Xith3D : Rendu OpenGL ;
  • 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.

Des exemples de très beaux jeux



Undead Arena – Quake 3 Java : Un port du moteur de Quake 3 en Java. Il n'est pas encore fini, mais je peux vous assurez que ca en jette ^^.
Lien JavaWebStart

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é

Tribal Trouble : Un jeux en 3D, très dynamique utilisant LWJGL

Shadowbane : Un MMORPG en Java

Runescape : Un autre MMORPG en Java

Minecraft : On ne le présente plus

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 , 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 ;)

-
Edité par Benzouye 6 avril 2021 à 14:00:03

  • Partager sur Facebook
  • Partager sur Twitter
Le développement de jeu vidéo vous intéresse ? Parlons en !
20 octobre 2010 à 14:03:45

Le lien pour la sdljava retourne une erreur 404

Bouah ça allait surement m'intéresser ^^
  • Partager sur Facebook
  • Partager sur Twitter
20 octobre 2010 à 14:15:34

Le lien est corrigé, tu pouvais aussi regarder le tutoriel SDLJava du site (où tu y aurais trouvé un lien) ou depuis google.
  • Partager sur Facebook
  • Partager sur Twitter
Le développement de jeu vidéo vous intéresse ? Parlons en !
20 octobre 2010 à 14:39:19

C'est ce que j'ai fais ;)

D'ailleurs, je suis coincé pour l'installation de la sdl sur MacOs X. Je ne parviens pas à lancer les exécutables unix qu'ils nous donnent. Une idée ? Ils disent dans le ReadMe qu'il faut peut être effectuer des changement dans le système.
Je me permet de te poser la question parce que j'ai remarqué que c'était justement ce qu'il manquait à ton tuto SDL : l'installation sous Mac.

Sinon, j'en profite pour te remercier pour toutes les infos données :) Ca me sera utile !
  • Partager sur Facebook
  • Partager sur Twitter
20 octobre 2010 à 17:31:05

Salut,

Pour être honnête et c'est indiqué dans le tutoriel que j'ai écrit pour ce site, SDLJava n'est pas recommandé pour faire quelque chose de potable, c'est cool pour s'amuser mais c'est tout.

Ensuite tu es sous Mac OSX ? et bien pas de chance il n'y a pas de binaire fonctionnel avec Mac OSX (je me suis cassé les dents sous 10.4 et 10.5 pour compiler la lib mais pas moyen).

Si tu veux travailler avec SDL sur mac il faudra utiliser un autre langage (ou compiler une version toi même mais vraiment, bonne chance).

Si je puis me permettre de te conseiller sur un vrai lib qui permet de faire du jeu, utilise Slick, c'est très facile à prendre en main, c'est orienté objet (contrairement à SDLJava qui n'est qu'un tas de méthodes statiques) et il y a une architecture cohérente derrière. De plus le projet est toujours en cours, et il existe pleins de trucs extérieurs pour Slick (fenêtrage, outils de mapping, etc...).

Actuellement je suis occupé, mais je pense que mon prochain tutoriel portera sur Slick qui vaud vraiment qu'on y jette un oeil. Je ne suis pas un fanboy java, je ne cherche pas à vendre Slick, mais quand quelque chose est bien foutu, il faut le mettre en avant ;)
  • Partager sur Facebook
  • Partager sur Twitter
Le développement de jeu vidéo vous intéresse ? Parlons en !
21 octobre 2010 à 18:29:08

Je me lance avec Slick alors ! Merci :)
  • Partager sur Facebook
  • Partager sur Twitter
2 novembre 2010 à 17:03:07

Salut, j'ai du mal a comprendre la différence entre librairie et moteur?

Est-ce qu'il faut utiliser l'un ou l'autre, ou peut être plutot une combinaison des deux?

(Je suis à la rue comme qui dirait :p:p )

  • Partager sur Facebook
  • Partager sur Twitter
2 novembre 2010 à 20:44:48

Salut,

Une bibliothèque (library en anglais) est un regroupement de classes qui permettent de s'affranchir des opérations dites "bas niveau". Dans le cas de Slick par exemple tu a des fonctions toutes prête pour afficher des éléments graphiques, du son, etc.. mais la structure et la logique haut niveau de ton jeu doit être fait par toi même.

On distingue plusieurs types de moteurs mais par exemple tu a les moteurs de "Jeux" et les moteurs "Graphiques". Un moteur graphique ne va que gérer l'affichage (et rien d'autre), il va donc contenir des méthodes toutes prêtes pour importer des modèles 3D par exemple (si tu avais utilisé un bibliothèque comme jogl tu aurais dû coder tout ça à la main). Le moteur de jeux lui va encore plus loin car généralement il comporte un moteur graphique, physique, il gère les entrées utilisateur (clavier, souris), il possède une structure, c'est en quelque sorte un gros squelette de jeu que tu va modifier.

Si tu a besoin d'autres précisions n'hésite pas ;)
  • Partager sur Facebook
  • Partager sur Twitter
Le développement de jeu vidéo vous intéresse ? Parlons en !
2 novembre 2010 à 22:53:57

Je me suis mis a JMonkeyEngine en attendant, et j'ai remarqué qu'il pouvait s'appuyer aussi bien sur LWJGL que sur JOGL donc des librairies bas niveaux.

Je me lance dans cette aventure de "création de jeu vidéo" et pour le moment j'apprécie vraiment ce que je découvre, j'espère avoir le courage d'aller jusqu'au bou :p .

Une zone d'ombre reste néanmoins présente dans ma tête, c'est la communication réseau. Je suis loin d'en être là encore, mais je me demande comment pouvoir transmettre toutes les informations pour que par exemple deux joueurs sur une même map aient la même position de chaque créature présente par exemple. J'ai vue qu'il y avait SpiderMonkey qui était utilisé avec JMonkeyEngine.
Mais faut-il penser plus l'application avec dans ce cas une application serveur qui relaie toutes les informations afin de synchroniser les affichages de tous les joueurs ou a chaque fois qu'un objet bouge chez un joueur on envoi l'information aux autres joueurs.
C'est quelques choses qui m'a toujours étonné dans les jeux vidéos (type MMO), comment font-ils pour synchroniser tous les joueurs sans saturer les réseaux ou que ça devienne trop lourd o_Oo_O .

Merci de ta réponse en tout cas :)
  • Partager sur Facebook
  • Partager sur Twitter
11 novembre 2010 à 19:49:00

Salutation !

Merci beaucoup pour ce post assez constructif :) cependant, il me reste une question :

prenons pour exemple avenginia que j'ai trouvé, en effet, très beau !
est-ce pour autant que c'est "simple" a faire ?


je m'explique : il est possible de faire des chose très belle, mais pour cela, faut-il avoir une mega-optimisation-de-la-mort-qui-tue et une équipe de 8 pro derrière qui bosse depuis deux ans dessus, ou bien un simple amateur peut atteindre (ou du moins approcher) cette qualité ?

Merci :)
  • Partager sur Facebook
  • Partager sur Twitter
13 novembre 2010 à 9:54:01

Salut,

Je ne serais te répondre car je n'ai pas jeter un oeil aux sources. Maintenant il faut savoir qu'il y a surement des optimisations pour arrivé à un truc pareil mais ça ne veut pas dire qu'un amateur ne pas peut approcher ce niveau.

Je pense que c'est surtout tes connaissances et ton investissement qui vont te permettre de créer quelque chose qui y ressemble et c'est pareil partout, dans tout les langages.

Si tu regarde les jeux fait avec JMonkeyEngine tu verra que c'est super propre côté rendu (et là c'est le moteur qui s'occupe du gros du boulot).
  • Partager sur Facebook
  • Partager sur Twitter
Le développement de jeu vidéo vous intéresse ? Parlons en !
Anonyme
2 décembre 2010 à 14:46:26

<citation rid="5564885"> comment font-ils pour synchroniser tous les joueurs sans saturer les réseaux ou que ça devienne trop lourd/citation>

Le nombre d'info a envoyer dépend de la portée du joueur:

exemple: j'ai un vaisseau spatial qui se promene aux alentour du point (100, 100, 100), ce que je dois connaitre: les autres vaisseaux qui sont à une distance proche de moi, pour ceux là, je reçois donc le max d'info(leur position, état, orientation,...), par contre ceux qui sont un peu plus loin, juste visible au radar par exemple, j'ai juste besoin de recevoir leur position, et ceux qui sont hors champs du radar, je ne reçois rien du tout, ils sont ignorés.

Au final, les informations qui transitent ne sont donc pas si énormes à partir du moment ou la portée est bien gérée.
  • Partager sur Facebook
  • Partager sur Twitter
3 décembre 2010 à 9:28:05

Dac, bien gérer la portée. J'ai du taf :)
Mais quand meme, pour certains jeux, juste connaitre la position pour le radar ça doit faire pas mal d'information. Je pense par exemple aux jeux de stratégies comme warcraft 3 par exemple vu que mon jeux s'en rapproche pas mal sur certains points. Lorsque l'on a par exemple une centaine de mobs sur la map et qu'on veux savoir a chaque fois où ils sont ça devient un peu chaud. Pour ça d'ailleurs qu'il y a parfois des lags en jeu.

Faut aussi penser aux connexions des joueurs qui ne sont pas égal et à se caler sur la connexion la plus faible.

ça en fait des choses à voir !!! :p

Merci de ta réponse
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
3 décembre 2010 à 10:21:10

Citation : herudo

Dac, bien gérer la portée. J'ai du taf :)
Mais quand meme, pour certains jeux, juste connaitre la position pour le radar ça doit faire pas mal d'information. Je pense par exemple aux jeux de stratégies comme warcraft 3 par exemple vu que mon jeux s'en rapproche pas mal sur certains points. Lorsque l'on a par exemple une centaine de mobs sur la map et qu'on veux savoir a chaque fois où ils sont ça devient un peu chaud. Pour ça d'ailleurs qu'il y a parfois des lags en jeu.

Faut aussi penser aux connexions des joueurs qui ne sont pas égal et à se caler sur la connexion la plus faible.

ça en fait des choses à voir !!! :p

Merci de ta réponse



Non justement, tu ne vois pas tous les mob, à cause du brouillard de guerre:

Dans le jeu que je développe, la carte tactique :


Image utilisateur

Les icones vertes représentent les unités du joueur, les rouges celles hostiles et les cercles blanc autour des icones sont la visibilité de l'unité.

Bien que sur la carte existe des unités ennemies, le client n'en a pas connaissance car elles ne se trouvent pas à la distance de visibilité, donc aucune icone rouge, si l'une d'entre elle s'approche assez, alors le serveur en informe le client.
  • Partager sur Facebook
  • Partager sur Twitter
3 décembre 2010 à 10:46:27

Le fameux brouillards de guerre, sauf sur les grosses bastons où toutes les unités se rencontrent :). C'est un point qui me fait peur, faudra que je m'y penche particulièrement
  • Partager sur Facebook
  • Partager sur Twitter
28 décembre 2010 à 18:47:51

Merci braucoup, SLICK est vraiment géniallissime.

(ou comment écrire plus de 1000 lignes de code à 40 fps contre environs 300 à 130fps... au moins j'aurais bcp appris sans, mais avec SLICK, c'est tellement plus simple)
  • Partager sur Facebook
  • Partager sur Twitter
9 janvier 2011 à 11:08:44

Citation

ou comment écrire plus de 1000 lignes de code à 40 fps contre environs 300 à 130fps...



Tu peux être plus clair ? tu compare quoi et quoi ? SDLJava et slick ? (car côté perf c'est surement ça ^^)
  • Partager sur Facebook
  • Partager sur Twitter
Le développement de jeu vidéo vous intéresse ? Parlons en !
10 janvier 2011 à 8:33:37

Je compare,
(pour un jeux tout con : je suis à droite et des mechant apparaisse et me tire des balles dessus)
Image utilisateur

20fps : bcp de ligne de code, descente à 7fps avec 1000 entités (perso + balles)
import java2d.Java2DGameWindow;
import java2d.Java2DSpriteStore;

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GradientPaint;
import java.awt.Graphics2D;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferStrategy;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsEnvironment;
import java.awt.Image;
import java.awt.Transparency;

import javax.swing.JFrame;
import javax.swing.JPanel;


avec

400fps : descente à 40fps avec 1000 entités (perso + balles)
import org.newdawn.slick.Color;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Image;
import org.newdawn.slick.Input;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.Sound;
import org.newdawn.slick.geom.Rectangle;
import org.newdawn.slick.geom.Vector2f;
import org.newdawn.slick.imageout.ImageOut;
import org.newdawn.slick.state.BasicGameState;
import org.newdawn.slick.state.StateBasedGame;
import org.newdawn.slick.state.transition.FadeInTransition;
import org.newdawn.slick.state.transition.FadeOutTransition;


Surement aussi parce que slick impose une certaine organisation (init render update) alors que je faisais tout dans le gameloop.

ai-je été assez précis ?
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
10 janvier 2011 à 10:29:49

1000 entités? tu fais un sprite pour chaque balle? utilise une texture animée(tu peux la dupliquer pour simuler l'effet de dispersion lorsque l'arme bouge) dont la taille est variable en fonction des collisions avec des autres entités, tu n'auras plus qu'un sprite à gérer et surtout, les calculs de collisions seront bien moindres.
  • Partager sur Facebook
  • Partager sur Twitter
11 janvier 2011 à 20:36:23

Ce n'est pas très étonnant ton résultat, Slick est basé sur LWJGL qui utilise un rendu OpenGL, les fenêtres swing/Awt utilisent un rendu via le processeur (matériel quand disponible). Ca confirme aussi ce qu'on dit des interfaces graphique en java qui sont franchement LENTE.

Pour en revenir à Slick, c'est pour ces raisons que je le conseil à tout ceux qui veulent faire de la 2D sans trop se prendre la tête avec au final de bonnes (voir très bonnes) performance et surtout un code organisé.
  • Partager sur Facebook
  • Partager sur Twitter
Le développement de jeu vidéo vous intéresse ? Parlons en !
10 février 2011 à 15:31:02

Citation

Salut, j'ai du mal a comprendre la différence entre librairie et moteur?

Est-ce qu'il faut utiliser l'un ou l'autre, ou peut être plutot une combinaison des deux?

(Je suis à la rue comme qui dirait :p:p )


Je suis un peu dans le même cas, je comprends bien ce qu'est une bibliothèque en fait, mais pas un moteur. Je ne vois pas ce que c'est concrètement.
La bibliothèque c'est quelque chose qui te permet en quelques lignes de code de faire une opération graphique ou pas (par exemple JFrame me permet d'afficher une fenêtre graphique) mais un moteur il fait quoi? Ca correspond à du code? JE vois pas du tout ^^
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
10 février 2011 à 16:03:17

une bibliothèque contient des facilité pour réaliser des opérations relativement généralistes correspondant aux besoin du développeur.

un moteur peut être composé ou non de bibliothèque permet de réaliser des opération complexes plus ciblées.
  • Partager sur Facebook
  • Partager sur Twitter
12 février 2011 à 11:00:35

Salut,

Je vais prendre un exemple simple pour comparer le moteur et la librairie. Prenons le cas des applications web (site internet, etc...).

Quand tu code ton site tu peux :
- Le faire entièrement à la main
- Utiliser des librairies (JQuery, etc...) pout t'aider et ne pas réinventer la roue
- Utiliser un framework (Symfony, CakePHP, etc..) pour avoir un site rapidement sur pied
- Utiliser un CMS (un site déjà tout fait que tu personnalise à ton gout)

Renvenons en aux lib/moteur java

Une librairie c'est donc un collection de fonctions/classes qui permettent de gagner du temps, mais ça ne fait pas le travail à ta place. Par exemple si tu utilise OpenGL, tu va utiliser une librairie (JOGL ou lWJGL) qui va te permettre de faire des rendus graphique et c'est tout, tout le reste :
- Logique du jeu
- Interface graphique
- Chargement des différents éléments du jeu (modèles, son, textures, textes, etc..)
C'est à toi de le faire, de le coder.

Un moteur maintenant c'est quelque chose de plus gros que la librairie, c'est une collection de de classe/fonctions ET c'est aussi une logique déjà en place. En gros quand tu utilise un moteur graphique par exemple tu n'a généralement pas à te soucier des opérations bas niveau (dire qu'on utilise un vertexArray plutôt qu'un VBO, etc..). Avec le moteur tu a une structure à respecter car au final, le moteur c'est un brique déjà réalisée pour ton jeu.

C'est pour ça que généralement quand on utilise un moteur on hérite souvent d'une classe mère Game qui fait déjà toutes les initialisations, etc...

Pour finir, La librairie te donne un coup de main mais ne développe pas à ta place, tu devrais faire toutes les opération bas niveau toi même (même si la lib est là pour t'aider). Le moteur te mettra directement une place un structure de travail et tu n'aura "qu'à" te concentrer sur la logique du jeu.


Après on fait la différence entre moteur de jeu (comme l'unreal Ungine, Source Engine, Unity, etc..) qui sont des moteurs qui contiennent vraiment TOUT :
- Gestion graphique (modèle 3D, textures, lumière spécifiques,etc..)
- Son
- Entrées
- Interface
- Réseau
- OS (windows, linux, mac, mobile...)
Là généralement tu utilise un éditeur de carte (map) et tu script et au final tu arrive à avoir un jeu.

Et tu a les moteurs spécialisés dans un domaine précis, on les appels des moteurs graphiques, des moteurs de son, des moteurs réseau. Ton jeu sera composé de plusieurs moteur specifiques par exemple. On peut aussi dire qu'un moteur de jeu est composé de plusieurs moteurs spécifiques.

Pour faire l'analogie grossière avec mes exemples web du début :

- coder son site à la main = coder son jeu à la main sans rien
- coder son site à la main avec l'aide (JQuery, Prototype, etc..) = Coder son jeu avec des librairies (SDL, OpenAL, etc..)
- Coder son site avec un/des moteur(s) spécifiques : Coder son site en utilisant un framework (Symfony, CakePHP, Zend, etc..)
- Modifier un CMS, ajouter des fonctionnalités au CMS, coder des nouveaux modules au CMS = Utiliser un moteur de jeu (Unity, JME, etc..)

J'espère avoir put répondre à ton intérrogation.
  • Partager sur Facebook
  • Partager sur Twitter
Le développement de jeu vidéo vous intéresse ? Parlons en !
12 février 2011 à 16:54:04

Citation

Un moteur maintenant c'est quelque chose de plus gros que la librairie, c'est une collection de de classe/fonctions ET c'est aussi une logique déjà en place. En gros quand tu utilise un moteur graphique par exemple tu n'a généralement pas à te soucier des opérations bas niveau (dire qu'on utilise un vertexArray plutôt qu'un VBO, etc..). Avec le moteur tu a une structure à respecter car au final, le moteur c'est un brique déjà réalisée pour ton jeu.


Citation

Pour finir, La librairie te donne un coup de main mais ne développe pas à ta place, tu devrais faire toutes les opération bas niveau toi même (même si la lib est là pour t'aider). Le moteur te mettra directement une place un structure de travail et tu n'aura "qu'à" te concentrer sur la logique du jeu.


Merci!!!!!!
C'était très clair je comprends enfin ce qu'est un moteur graphique :D
Je vais faire quelques recherches maintenant pour pouvoir en utiliser ;)
  • Partager sur Facebook
  • Partager sur Twitter
12 février 2011 à 17:12:39

Il faut rajouter minecraft comme jeu Java :) même s'il n'est pas folichon graphiquement (et c'est voulu).
  • Partager sur Facebook
  • Partager sur Twitter
Je suis professeur de mathématiques sur LiveMentor, pour niveaux collège/lycée/prépa MPSI :)
13 février 2011 à 12:49:30

faut aussi savoir que generalement, beaucoup de créateur de jeux fabrique un seul moteur (qu'ils améliore au fils du temps) et se serve de ce moteur pour faire tout leur jeux, au lieux de recommencer pour chaque jeux :)
  • Partager sur Facebook
  • Partager sur Twitter
13 février 2011 à 14:46:00

@Yourgod : il faut que tu suives des tutoriels vidéos, ou que tu ailles regarder le minecraft wiki sur Internet, il y a moyen de faire de très intéressantes oeuvres d'architecture et de technologie : tu peux faire des circuits électriques, etc. Et n'oublie pas que le jeu est récent !

Le véritable intérêt du jeu est la construction de bâtiments et de complexes je dirais.
  • Partager sur Facebook
  • Partager sur Twitter
Je suis professeur de mathématiques sur LiveMentor, pour niveaux collège/lycée/prépa MPSI :)
14 février 2011 à 9:50:39 - Message modéré pour le motif suivant : Le flood est strictement interdit


14 février 2011 à 10:31:06 - Message modéré pour le motif suivant : Réponse au flood.


Je suis professeur de mathématiques sur LiveMentor, pour niveaux collège/lycée/prépa MPSI :)
15 février 2011 à 15:23:29

<post inutile>

Je vais pleurer, je réclame un minimum de pub pour ce jeu de génie qu'est Minecraft : http://www.minecraft.net/

Si ca c'est pas du beau jeu en Java, exemple qui plus est du "geek dream" : "je suis devenu riche avec mon petit programme fait maison".

Enfin voila, très bon topic ceci dit!

</post inutile>
  • Partager sur Facebook
  • Partager sur Twitter