Précédent   Forum du club des développeurs et IT Pro > Applications > Développement 2D, 3D et Jeux
Développement 2D, 3D et Jeux Forum développement 2D, 3D et Jeux. Avant de poster : Les FAQs Programmation 2D, 3D et Jeux
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 08/11/2012, 18h10   #1
Despirithium
Invité de passage
 
Homme
Développeur de jeux vidéo
Inscription : 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.
Despirithium est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/11/2012, 12h02   #2
JérémieL
Membre régulier
 
Homme
Ingénieur développement logiciels
Inscription : juillet 2009
Messages : 50
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : juillet 2009
Messages : 50
Points : 93
Points : 93
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.
JérémieL est déconnecté   Envoyer un message privé Réponse avec citation 11
Vieux 09/11/2012, 12h07   #3
Despirithium
Invité de passage
 
Homme
Développeur de jeux vidéo
Inscription : 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
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
Despirithium est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2012, 14h37   #4
JérémieL
Membre régulier
 
Homme
Ingénieur développement logiciels
Inscription : juillet 2009
Messages : 50
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : juillet 2009
Messages : 50
Points : 93
Points : 93
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
JérémieL est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/11/2012, 16h51   #5
Despirithium
Invité de passage
 
Homme
Développeur de jeux vidéo
Inscription : 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
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

Citation:
[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.
Despirithium est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2012, 17h29   #6
JérémieL
Membre régulier
 
Homme
Ingénieur développement logiciels
Inscription : juillet 2009
Messages : 50
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : juillet 2009
Messages : 50
Points : 93
Points : 93
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...
JérémieL est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2012, 17h30   #7
Despirithium
Invité de passage
 
Homme
Développeur de jeux vidéo
Inscription : 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
J'hésite entre le XML et la Base de donnée. SQLite m'a l'air pas mal. Qu'en penses-tu ?
Despirithium est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2012, 20h41   #8
punkcoders
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
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.
  Envoyer un message privé Réponse avec citation 10
Vieux 15/11/2012, 22h21   #9
franck06
Membre actif
 
Inscription : octobre 2004
Messages : 243
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 243
Points : 189
Points : 189
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 ...
franck06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 22h34.


 
 
 
 
Partenaires

Hébergement Web