IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement 2D, 3D et Jeux Discussion :

Système de gestion des maps/évènements


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Novembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2012
    Messages : 9
    Points : 8
    Points
    8
    Par défaut Système de gestion des maps/évènements
    Salut à tous !
    Cela fait pas mal de temps que je programme en C++ et l'aspect qui me passionne est la programmation de jeux vidéos. J'ai déjà pu faire quelques petits jeux avec un éditeur de map et une map mais contenant uniquement quelques petits sprites différents.
    Maintenant je me pose la question d'un RPG et je me demande comment je pourrais gérer un système d'évènements, ou d'abord simplement lier plusieurs maps.

    Je travail sur un petit projet nécessitant cela (je m'approche petit à petit du RPG) donc il serait appréciable de recevoir un petit coup de main dans mon ascension

    Cordialement.

  2. #2
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2009
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2009
    Messages : 132
    Points : 283
    Points
    283
    Par défaut
    Bonjour !

    C'est un sujet très intéressant en effet, même si ta question est assez floue. Qu'est-ce qui te pose problème : la définition d'évènements (que j'imagine pré-définie : entrée dans une zone, clic sur un objet, entrée du clavier, etc.) ou le paramétrage d'actions exécutées pour un évènement donné ?

    Pour les actions à exécuter, le plus simple est de définir des objets d'actions (ou commandes) paramétrables que tu associeras à des évènements. Par exemple, si un objet "Porte" dispose d'un évènement "Ouverture", tu pourrais associer une action "Jouer son" avec comme paramètre le nom de la ressource sonore à jouer. Toutes ces associations évènements/actions pourraient être définies dans un fichier XML. C'est une façon de faire mais qui a le défaut d'être assez rigide.

    Un système de scripts apporte plus de liberté, et c'est ce qu'on trouve le plus souvent dans les jeux de ce type. Des bibliothèques existent pour créer des bindings d'objets/méthodes C++ dans un langage de script (Python, Lua...). Tu peux ainsi associer des scripts à des objets sur certains évènements, dans lesquels tu peux appeler n'importe quelle méthode de l'API que tu auras définie. Par exemple un script onOpen() {getSound("monSon").play()}.

    Voilà déjà quelques idées. Je peux détailler un peu plus si tu veux, je te laisse déjà y réfléchir.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Novembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2012
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Le système de script m'intéresse, as-tu quelques pistes à me donner ? Est-ce complexe ? Il y aurait-il des libs connues avec éventuellement un tutoriel, sinon une documentation claire ?

    Merci d'avance et merci pour la réponse

  4. #4
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2009
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2009
    Messages : 132
    Points : 283
    Points
    283
    Par défaut
    J'avais créé (modifié) un système de scripts Lua pour un moteur de jeu dans ma boîte précédente. Je n'ai plus accès au code source donc je vais pas pouvoir rentrer trop dans les détails pour l'instant, mais j'avais utilisé LuaBind pour créer des bindings Lua de la plupart des classes C++ du moteur. Tu trouveras de la doc et un tuto sur le site de Luabind. Pour apprendre le langage Lua, il y a le site de Lua (c'est un langage très simple et facile à apprendre).

    Je connais bien Lua mais Python est sans doute pas mal aussi. Il existe une bibliothèque Boost:: Python, bien supportée et très puissante (mais Python est peut-être un peu plus long à appréhender).

    Quoiqu'il en soit, ces bibliothèques (Luabind, Lunar pour Lua, Boost:: Python pour Python) te permettront de créer des bindings de classes, ce qui fait que tu pourras créer des objets C++ et appeler leurs méthodes dans un script Lua/Python !
    Et inversement, tu peux appeler un script/fonction de script à partir de code C++. Cela te permettra donc, par exemple, pour un évènement "Ouverture de porte", d'appeler une fonction de script, en lui passant des paramètres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function onDoorOpen(idPorte)
      -- J'appelle des fonctions sur d'autres objets de mon jeu
    end

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Novembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2012
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    J'ai fait quelques recherches et j'ai donc pu voir qu'il fallait installer Boost. Lors que j'ai tenté de l'installer, et de lancer bjam, j'ai eu un warning du type "mismatched" ou je ne sais plus quoi, si mon boost n'est pas correctement compilé je ne pourrai pas essayer Luabind ^^'

    Autre chose, qu'est-ce qu'un bind à proprement parler ? C'est genre une fonction C++ qui permet d'executer une commande Lua ?
    Je conçois un jeu avec un déplacement case par case (admettons 16 case par 16 case et ayant 30 pixel de largeur et de hauteur par case). Donc pour réaliser ma carte j'utilise un tableau à deux dimensions, jusqu'ici tout va bien.
    Ces cases sont des structures contenant le type de case dont il s'agit (des énumérations), et je compte y mettre un vecteur de type Evenement.

    Ce que je voudrais, c'est pouvoir sauvegarder ces évènements et les créer via un éditeur, j'utilise SFML pour mon interface graphique.
    J'aimerais savoir s'il y a un système de gestion de fichier plus simple à manier (la sérialization est la raison pour laquelle j'ai tenté d'installer la totalité de Boost, sans succès) pour sauvegarder ces évènements, ou je risque de me retrouver avec des fichiers textes trop lourds du type

    [1]
    [1]
    [1]
    [1][Teleporter;Map2;10;12]
    [1]
    [2][Combat;Ennemi1]
    Je veux bien développer de cette manière mais je me demandais s'il y avait un système de tri plus développé
    Merci de la réponse une fois encore.

  6. #6
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2009
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2009
    Messages : 132
    Points : 283
    Points
    283
    Par défaut
    Pour Boost, sache déjà que la plupart des bibliothèques sont "header-only", c'est-à-dire qu'il suffit d'inclure les .h pour les faire fonctionner. Si tu as un problème pour compiler les autres, c'est difficile de t'aider sans avoir plus de détails. N'hésite pas à créer un nouveau sujet spécifique dans la section C++ de ce forum, tu auras peut-être plus de réponses (mais fais quand même une recherche avant).

    Sinon, un "bind", c'est une connexion/association entre deux langages, ici une classe/fonction C++ et son équivalent en Lua/Python. Cela te permettra d'utiliser tes classes C++ (celles pour lesquelles tu auras écrit des bindings) en Lua/Python. Fais quelques recherches sur Google ("Lua binding C++"), je pense que tu trouveras rapidement des exemples (parce que je suis pas forcément très clair ).

    Pour la sauvegarde de ta carte dans un fichier, ah ça c'est encore un autre problème. Pour conserver tes données tu as plusieurs solutions : XML, fichiers textes simples, base de données...

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Novembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2012
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    J'hésite entre le XML et la Base de donnée. SQLite m'a l'air pas mal. Qu'en penses-tu ?

  8. #8
    punkcoders
    Invité(e)
    Par défaut
    Je réponds en deux parties:

    1/ la gestion des events

    Heu là je sèche.

    Je comprends pas tout bien... la mécanique des aventure/rpg est assez bête, ça consiste bêtement à coder pour chaque objet un test d'interaction avec le joueur, qui teste les variables que tu veux, et en fonction du résultat l'objet aura tel type de comportement. (par exemple si ton bonhomme a la clé A alors la porte A s'ouvre, si ton bonhomme n'a pas tué le dragon alors la princesse lui met un râteau, etc)

    Je comprends pas trop à quoi ça sert de rajouter un système d'events par dessus.


    2/ L'enchainement des maps

    Déjà il faut placer le joueur dans la nouvelle map chargée en fonction de par où il est rentré, ça veut dire stocker quelque part les coordonnées de tous les points d'entrée.

    Et après tu pourras rajouter un l'effet visuel d'enchaînement. Ca peut être un scroll forcé si l'enchaînement de maps se fait en sortant de la map, sinon un fondu au noir quand le bonhomme passe une porte... et ça se gère avec un state ou une subroutine.
    Dernière modification par punkcoders ; 11/11/2012 à 21h03.

  9. #9
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2004
    Messages : 398
    Points : 710
    Points
    710
    Par défaut
    salut à toi,

    moi j'avais fait ça à l'époque, je sais pas si ça peut t'interesser :
    http://provenza24.free.fr/pulpcore/Demo%20RPG/build/

    F11 pour voir la Map en cours
    il y a deux maps en extérieur, et 2 maisons dans lesquelles tu peux entrer
    tu peux ramasser une clé cachée dans la maison bleue, en poussant le meuble a côté du lit, et voir les items ramassés avec F12
    espace pour parler aux autres personnages

    bref, je m'étais posé les mêmes questions que toi à lépoque, et le mieux, ben c'était de coder pour voir comment résoudre tout ça
    c'est du java, pulpcore pour la 2D

    si des fois ça t'interesse ma foi ...

Discussions similaires

  1. Système de gestion des gardes pharmacie
    Par mechakiss dans le forum Cas d'utilisation
    Réponses: 7
    Dernier message: 07/02/2012, 18h17
  2. Système de gestion des préférences
    Par monnomamoi dans le forum Général Python
    Réponses: 8
    Dernier message: 20/03/2010, 16h04
  3. Gestion des maps côté serveur
    Par nazoreen dans le forum Développement 2D, 3D et Jeux
    Réponses: 5
    Dernier message: 12/02/2010, 05h17
  4. Logiciel de gestion des mappings
    Par pitop dans le forum Alimentation
    Réponses: 2
    Dernier message: 03/12/2008, 13h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo