CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

LionEngine - Moteur de jeu 2D (Java)

djthunder
djthunder
Niveau 5
14 février 2011 à 00:35:38

Bonsoir,

Je me permet de passer ici pour vous signaler que mon moteur de jeu spécialement développé à l'occasion de mon remake de Lionheart (et de Warcraft Remake actuellement) est disponible en téléchargement ici:
- http://www.b3dgs.com/v4/page.php?lang=fr&section=lionengine

Vous y trouverez la librairie prête à être utilisée avec Java, et pour les plus curieux, j'ai aussi mis les sources à disposition.

Énième rappel (cependant en lien avec le moteur) pour dire que si vous avez des difficultés à l'utiliser, j'ai fais un cours/tp basé sur mon moteur:
- http://www.b3dgs.com/v4/tutorials/game_programming/jeux_plateforme_tp.php

En exemple, vous avez les sources (non complètes pour le moment, j'y travaille toujours) de mon remake de Lionheart utilisant le moteur:
- http://www.b3dgs.com/v4/page.php?lang=fr&section=lionheart_remake

Si vous avez toujours des difficultés ou des incompréhension autour du moteur, je vous pris d'utiliser plutôt le forum que j'ai récemment mis à disposition plutôt que les mails ...
(section LionEngine)
- http://www.b3dgs.com/v4/forum/

Trois screens rapides pour illustrer ce post:
- http://www.b3dgs.com/v4/projects/lionengine/screen2.png
- http://www.b3dgs.com/v4/projects/lionengine/screen3.png
- http://www.b3dgs.com/v4/projects/lionengine/screen4.png

Bonne lecture aux intéressés ;)

djthunder
djthunder
Niveau 5
20 août 2011 à 16:23:03

Bonjour,

Le moteur passe maintenant en version 2.
Rien à voir avec la version précédente qui est largement obsolète comparé à cette nouvelle monture.

Il est maintenant possible de créer un Mario-like en moins de 2 avec de simples connaissance en programmation objet !

Le moteur propose en effet un ensemble de fonction bas niveau, pour la gestion des ressources, mais aussi des classes abstraites pour simplifier le développement des jeux (pour par exemple gérer une TileMap, ou un Raster, ou encore un joueur pour un jeu de plateforme...)

La partie abstraite concernant les jeux de stratégie est en cours de développement et progresse bien.
Les demos viendront dans le même temps (tout comme la partie plateforme).

Nouvelle page du projet:
http://www.b3dgs.com/v5/page.php?lang=fr&section=lionengine

djthunder
djthunder
Niveau 5
16 septembre 2011 à 21:14:06

Petites notes à propos de l'état du moteur à l'heure actuelle:

La version 3 se profile (mais ce n'est pas encore pour demain).
En résumé, j'ai apporté énormément de couches abstraites pour aider à la réalisation d'un jeu de type Stratégie (et conjointement Hack'N Slash).

Entre autre, l'architecture est découpé de cette façon:

  • AbstractEntity : classe la plus basse désignant tout objet pouvant appartenir ou non à un joueur, avec lequel il est possible d’interagir (de manière plus grossière, les bâtiments et les unités)

- AbstractBuilding : première couche plus spécifique, réalisant un contrôle bas niveau de ce que peut être un bâtiment
- AbstractUnit : comme précédemment, mais pour les unités.

Dans un but d'architecture propre, et de modularité la plus extrême possible (afin de ne pas brider les volontés du développeur), j'ai organisé les "habilités" principales en module, afin d'avoir un couplage le plus faible possible:

  • BuilderAbility : module permettant à celui qui l'utilise de construire un objet de type AbstractBuilding à une position spécifique. Il est aussi possible de compléter les méthodes de bases (par exemple, pour afficher la progression à l'écran)
  • ExtractAbility : module traitant l'extraction de ressource (généralement associé à la même unité pouvant construire). Il est possible de définir un lieu d'extraction (de type AbstractEntity), ou d'une localité (pour un Tile par exemple, comme des arbres). La routine bas niveau s'occupera de gérer les allé-retour de l'unité; après avoir spécifié la zone de retour (pouvant être calculée automatiquement à partir du plus court chemin, selon les attributs définis par le programmeur)

On pourra aussi définir un temps d'extraction/dépôt, avec les animations qui vont bien, et des effets supplémentaire en remplissant la fonction prévue à cet effet.

  • ProducerAbility : ce module permettra de produire n'importe quoi de type AbstractUnit. Généralement utilisé par les bâtiments (même si c'est applicable à une unité), le fonctionnement est similaire à la classe précédente, avec une routine fonctionnant en interne, qu'il est possible de compléter. Là encore, on peut définir la capacité de la file de production, le temps pour chaque élément, avoir la progression...
  • AttackerAbility : ou comment transformer le possesseur en unité de combat. Je ne donnerai pas trop de détails sur cette dernière, car j'y travaille.

Ces principales habilités sont donc applicables à n'importe quoi. Tout ce qu'il faut, c'est ajouter un champs à la classe l'utilisant, implémenter l'interface, et effectuer une délégation pour chaque méthode.
Exemple avec une classe générique utilisée par tout mes bâtiments:

// ...
private final ProducerAbility<SkillModel, Attributes> producer;

// Constructeur

// ...
@Override
public void addToProductionQueue(String name, int time) {
this.producer.addToProductionQueue(name, time);
}

@Override
public void updateProduction() {
this.producer.updateProduction();
}

@Override
public int getProductionProgress() {
return this.producer.getProductionProgress();
}

@Override
public void stopProduction() {
this.producer.stopProduction();
}

@Override
public int getQueueLength() {
return this.producer.getQueueLength();
}

Il est aussi possible de redéfinir une habilité en héritant de la version abstraite (pour des cas plus particulier).

Ensuite, c'est un peu de même pour des classes moins générale, telles que StrategyCamera (gérant le point de vue du joueur), et StrategyCursor (pour cliquer sur la map ou le panel de contrôle, ou encore effectuer une sélection avec filtrage des éléments selon ce que l'on souhaite).

Même chose pour les deux principales routines: AbstractEntryHandler (qui s'occupe de mettre à jour tous les objets), et AbstractControlPanel (pour gérer le panel, afin d'avoir des infos sur les unités sélectionnées, leur actions...)

Concernant les compétences, j'ai essayé de construire quelque chose de solide et efficace:
Que ce soit pour lancer un sort (Heal, Firebolt...), déplacer, attaquer, construire; tout est mis au rang de Skill au sens large.
Il suffit de décrire dans un fichier externe, des infos (nom, description, icone...), de créer une classe pour chacune d'elles, d'appeler la méthode addSkill(...) d'une AbstractEntity, et cette dernière apparait dans le Panel de contrôle, et on peut interagir avec celle-ci. Tout est paramétrable à souhait et facilement (je veux afficher les compétences sur 3 colonnes, avec un espacement X Y, et rajouter un cadre de sélection; ou cacher ce bloc, dans le cas d'un grand nombre).
Il suffit ensuite de définir l'action de cette compétence (appeler la BuildAbility pour construire un bâtiment à partir de son nom; produire une unité en l'ajoutant à la file de production; donner de la vie à un blessé...)
Il est évidemment aussi facile d'ajouter des effets visuel et sonore.

Je travaille en parallèle sur un remake de Warcraft I, et je m’étonne moi même de la facilité à développer un tel jeu en utilisant mon moteur !

Il y a encore beaucoup de secrets, que je ne détaillerais pas pour le moment.
Pour cette prochaine version, j'axe beaucoup le travail sur la doc. En effet, j'essaye de donner une explication sur chaque méthodes et interface/classe abstraites, afin d'en comprendre rapidement le fonctionnement.

De toute façon, lorsque j'arriverai à quelque chose de très productif, je préparerai un tuto pour réaliser un jeu de stratégie; ainsi qu'une doc expliquant l'architecture globale du moteur (qui commence à devenir sacrément complexe...)

Affaire à suivre ;)

caelacanthe
caelacanthe
Niveau 10
16 septembre 2011 à 22:43:27

ce serait donc un moteur de jeu de stratégie? je vois qu'il est axé, entre autre, sur la production de bâtiments. :(

djthunder
djthunder
Niveau 5
16 septembre 2011 à 22:54:08

Pour le moment, le moteur supporte pleinement les jeux de plateforme (voir Lionheart Remake), et les jeux de stratégie (mais pas encore assez facilement; voir Warcraft Remake)

Et concernant mon explication, c'était juste à titre d'exemple (pour le code en citation).
Sinon, bien évidemment que tout ce qui touche au STR est traité en interne (Affichage d'une map, chargement/sauvegarde/conversion depuis une map rip, pathfinding, construction, production, sélection multiples, gestion d'un panel de contrôle... enfin, tout est déjà détaillé dans mon explication).

Ce sera peut être plus clair quand j'apporterai un exemple plus concret que des explications :)

_Sheep_
_Sheep_
Niveau 10
17 septembre 2011 à 22:16:06

Nice, ça m'a l'air super intéressant, je regarde tout ça demain, merci :ok:

djthunder
djthunder
Niveau 5
23 septembre 2011 à 12:45:02

Un peu plus de concret, avec cette petite vidéo montrant les automatismes gérées par le moteur: http://www.b3dgs.com/v5/projects/lionengine/videos/attack.mp4

Ici, après avoir défini ses petites classes (dire que telle unité à la capacité d'être attaquante, et lui avoir ajouté la compétence d'attaque), une fois l'ordre donnée, l'unité va se diriger sur sa cible, et la visée en s'orientant dans sa direction.

De plus, les animations sont gérées aussi automatiquement, quelque soit l'angle du personnage (dans les 8 angles possibles, dont 5 ont une image propre [NORD, NORD-EST, EST, SUD-EST, SUD], et les 3 autres sont issus d'un mirroir [SUD-OUEST, OUEST, NORD-OUEST])

Il suffit ensuite d'intercepter la routine gérant l'attaque, pour dire à quel moment on veut appliquer des dégâts (ou autre), jouer un son...

Il est possible de fixer la cible (continuer à la poursuivre si elle fuit).
Tout élément sous-jacent est également modifiable (afin de ne brider aucune volonté de modification; je ne pourrais jamais faire un moteur qui fait tout )

Voilà voilà; je vais m’atteler aux déplacement multiples, qui ne sont toujours pas parfaits...

djthunder
djthunder
Niveau 5
24 septembre 2011 à 15:42:45

Voici une nouvelle vidéo montrant la progression actuelle (extraction de différents types de ressources, déplacements multiples, attaque en groupe, suivit d'unité, filtrage des actions selon les unités sélectionnées)

http://www.b3dgs.com/v5/projects/lionengine/videos/extract_group.mp4

Je rappelle que cette vidéo ne met pas en évidence un jeu, mais bien des routines sous-jacentes prête à être utilisée (entre autre, je ne me suis pas attelé à afficher l'arbre coupé, ou faire disparaitre le travailleur dans la mine...)

Cette vidéo montre qu'il est possible de distinguer plusieurs types de ressource (ici en exemple: gold & wood), et donc de traiter chaque cas (comme jouer une animation spécifique).

Il est possible de déplacer un bon petit nombre d'unité en même temps sans qu'elles se gênent abusivement (mais il faut encore améliorer ce point).

Un filtrage est intégré dans le cas d'une sélection multiple, afin de n'afficher que les compétences en communs des unité (ex: travailleur + fantassin = marcher & stop)

La routine d'attaque marche, en solo comme en groupe, avec un suivit de la cible.

caelacanthe
caelacanthe
Niveau 10
24 septembre 2011 à 15:58:51

le style graphique est joli dans son genre, ça fait rétro. :oui:

mais le scrolling sur la carte semble beaucoup trop rapide, tu devrais implémenter un truc à accéleration progressive à l'occasion. :peur:

MonPseudoEstBan
MonPseudoEstBan
Niveau 10
25 septembre 2011 à 10:12:23

Juste une question, il faut coder en quoi :question:

MonPseudoEstBan
MonPseudoEstBan
Niveau 10
25 septembre 2011 à 10:33:55

Ah java desolé j'avais pas vu

djthunder
djthunder
Niveau 5
26 septembre 2011 à 00:46:42

@caelacanthe:
Je ne l'ai peut être pas explicité, mais il s'agit des graphismes de Warcraft I pour la démonstration vidéo.

Pour continuer, j'ai rajouté une gestion des projectiles.
On peut maintenant définir des projectiles, avec leur vitesse, dégâts, image... et bien sur une cible depuis une source.

http://www.b3dgs.com/v5/projects/lionengine/videos/projectiles.mp4

Comme vous le voyez, l'orientation des projectiles est aussi gérer selon l'orientation du tireur, et le vecteur de déplacement est calculé automatiquement en fonction de la trajectoire.

De plus, concernant les collisions, elles sont vectorielles, donc pas de soucis liées au bounding box (passage "au travers" si le projectile va trop vite).
Là, pas moyen de tricher, si ce n'est en esquivant :)

Bunyan
Bunyan
Niveau 17
26 septembre 2011 à 09:10:37

Ce n'est pas trop un soucis que les projectiles puissent travers les bois et que les PNJ non ?
Je vois un gros exploit là ^^'

Sinon ... tu comptes recréer tout warcraft 1 ? :)
En supprimant cette foutue limite de 4 unités sélectionnable en même temps ?
Joli boulot en tout cas.

djthunder
djthunder
Niveau 5
26 septembre 2011 à 23:20:20

@Bunyan: Si tu souhaites que les flèches ne traversent pas certains éléments, c'est facilement définissable. Là c'est juste une démo technique, pas de gameplay.

Pour poursuivre dans le même registre, je trouvais qu'un seul projectile n'était pas suffisant, alors j'ai complété pour pouvoir gérer tout aussi facilement de multiples projectiles à partir de la même source.

En résumé, voici le résultat: http://www.b3dgs.com/v5/projects/lionengine/videos/multiples_projectiles.mp4

Les projectiles sont toujours contrôlé par la même instance de projectile (la version originale); les autres sont des instances partagée de la version originale, possédant leur propre location.
Entre autre, ces contrôles peuvent être transparent pour l'utilisateur (tout est géré en interne). Il suffit juste d'appeler une fonction this.projectile.launch(target); et pi c'est tout !

Inutile de préciser qu'il est possible de définir son propre type de projectile, tout en restant compatible. On peut simplement définir des propriétés telles que: vitesse, durée de vie, dégats, animation, effets...

Entre autre, la classe AttackerAbility a vu naitre deux nouvelles classe: AttackerMeleeAbility (pour les attaques directe, bien que pas nécessairement au corps à corps), et AttackerDistanceAbility (pour les attaques projetant quelque chose)

Bon je suis désolé de m'acharner sur ce pauvre paysan... promis, les essais avec de nouveau cobayes arriveront prochainement

djthunder
djthunder
Niveau 5
28 septembre 2011 à 00:42:41

Voilà, j'ai enlevé le paysan, pour le remplacer par... une petite armée de grunt !

http://www.b3dgs.com/v5/projects/lionengine/videos/fight.mp4&quot;

J'ai ajouté un système de détection d'ennemis dans un rayon définissable.
Comme ça, les unités pouvant attaquer ne resteront pas passives lors d'une attaque, sauf si on leur demande.

caelacanthe
caelacanthe
Niveau 10
28 septembre 2011 à 00:53:26

ah oui, c'est joli, c'est bien animé, et ça marche parfaitement, de visu. :(

tbop2
tbop2
Niveau 10
28 septembre 2011 à 11:11:24

Cela me fait juste dire qu'aujourd'hui un développeur seul peut faire des jeux qui se seraient vendus à des millions d'exemplaires il y a 20 ans :)

Sinon pour les vidéos pourquoi ne les uploades tu pas sur youtube ?

caelacanthe
caelacanthe
Niveau 10
28 septembre 2011 à 13:00:18

"aujourd'hui un développeur seul peut faire des jeux qui se seraient vendus à des millions d'exemplaires il y a 20 ans :) "

:d) il y a 20 ans, un tas de jeux étaient développés par des équipes très réduites, voire des personnes seules. :oui:

frontier: elite :coeur:

djthunder
djthunder
Niveau 5
29 septembre 2011 à 01:12:54

@Tbop2: je veux pas que youtube se les approprie... non je déconne !
Simple fleme, ça va plus vite à mettre sur mon ftp rapido, surtout que c'est vraiment des vidéos temporaires.
J'en mettrais quand j'aurai quelque chose de complet à présenter ;)

A propos du dev de jeu solo, il faut pas oublier que j'ai repris les graphismes (certes les ripper ça prend du temps, mais quand même :d)

Toujours dans les automatismes de base, à savoir la détection de choses à attaquer dans un certain rayon, j'ai inclus le choix d'objets.

Par défaut, l'objet le plus proche est choisis.
Si il n'est plus accessible (trop de monde autour, bloqué), il cherchera le suivant et l'attaquera.

Petite illustration, avec un rush d'orcs dans une ville vide:
http://www.b3dgs.com/v5/projects/lionengine/videos/auto_attack.mp4

En principe, on ne devrait pas trouver d'adversaire oisif à proximité d'une cible potentielle. A moins qu'aucune ne soit accessible.
Ces opérations sont quasiment "gratuites" en terme de perf, puisque j'ai indexé un ID dans la structure de la map, me permettant de savoir qui occupe telle case.

Si vous voyez un attaquant oisif, c'est que la cible n'est pas dans son champs de vision (là aussi, définissable).

Silvermo
Silvermo
Niveau 26
01 octobre 2011 à 19:22:16

Cette meute d'orcs qui tapent c'est mimi :coeur:

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment