Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 9 sur 9
  1. #1
    Invité de passage
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    novembre 2012
    Messages
    8
    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 : 8
    Points : 3
    Points
    3

    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 confirmé
    Homme Profil pro Jérémie
    Ingénieur développement logiciels
    Inscrit en
    juillet 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Nom : Homme Jérémie
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : juillet 2009
    Messages : 116
    Points : 249
    Points
    249

    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
    Invité de passage
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    novembre 2012
    Messages
    8
    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 : 8
    Points : 3
    Points
    3

    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 confirmé
    Homme Profil pro Jérémie
    Ingénieur développement logiciels
    Inscrit en
    juillet 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Nom : Homme Jérémie
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : juillet 2009
    Messages : 116
    Points : 249
    Points
    249

    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 :
    1
    2
    3
    function onDoorOpen(idPorte)
      -- J'appelle des fonctions sur d'autres objets de mon jeu
    end

  5. #5
    Invité de passage
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    novembre 2012
    Messages
    8
    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 : 8
    Points : 3
    Points
    3

    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 confirmé
    Homme Profil pro Jérémie
    Ingénieur développement logiciels
    Inscrit en
    juillet 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Nom : Homme Jérémie
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : juillet 2009
    Messages : 116
    Points : 249
    Points
    249

    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
    Invité de passage
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    novembre 2012
    Messages
    8
    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 : 8
    Points : 3
    Points
    3

    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 à 22h03.

  9. #9
    Membre éprouvé
    Inscrit en
    octobre 2004
    Messages
    340
    Détails du profil
    Informations forums :
    Inscription : octobre 2004
    Messages : 340
    Points : 458
    Points
    458

    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 ...

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •