|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Développeur de jeux vidéo Inscription : novembre 2012 Messages : 8 ![]() |
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. |
|
|
10
|
|
|
#2 |
|
Membre régulier
![]() Ingénieur développement logiciels Inscription : juillet 2009 Messages : 50 ![]() |
Bonjour !
C'est un sujet très intéressant en effet, même si ta question est assez floue. 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. |
|
|
11
|
|
|
#3 |
|
Invité de passage
![]() Développeur de jeux vidéo Inscription : novembre 2012 Messages : 8 ![]() |
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 |
|
|
00
|
|
|
#4 | ||
|
Membre régulier
![]() Ingénieur développement logiciels Inscription : juillet 2009 Messages : 50 ![]() |
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 :
|
||
|
|
10
|
|
|
#5 | |
|
Invité de passage
![]() Développeur de jeux vidéo Inscription : novembre 2012 Messages : 8 ![]() |
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:
Merci de la réponse une fois encore. |
|
|
|
00
|
|
|
#6 |
|
Membre régulier
![]() Ingénieur développement logiciels Inscription : juillet 2009 Messages : 50 ![]() |
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... |
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Développeur de jeux vidéo Inscription : novembre 2012 Messages : 8 ![]() |
J'hésite entre le XML et la Base de donnée. SQLite m'a l'air pas mal. Qu'en penses-tu ?
|
|
|
00
|
|
|
#8 |
|
Invité(e)
![]() Messages : n/a ![]() |
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. |
10
|
|
|
#9 |
|
Membre actif
![]() Inscription : octobre 2004 Messages : 243 ![]() |
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 ... |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com