bonjours a tous,
voila je me suis lancé dans la creation de mon propres jeu de baston en 2D.
je vai le faire en C++ en utilisant SDL .
je ne suis pas tres bon en programmation je suis en premiere année de DUT informatique(-.-)
je voudrai avoir votre avis sur deux points:
premier point: -etant donné qu' un programme en C++(ou c) est une lecture de ligne de codes que on ne peut pas lui faire executer plusieur fonction en meme temps, il est donc impossible de demander au programme deffectuer de faire une animation entiere en meme temps avec deux personnage.
j'ai donc decider de faire une boucle for dans laquelle i est un frame.
donc a chaque boucle de ce for le programme regarde si l'utilisateur demande a son perso d'avancer , et ne charge que le la premiere image de l'animation d'avancée du perso puis regarde si le deuxieme personnage veut bouger, et lance l'image de l'animation desiré. en fin de boucle il affiche l'image final a l'ecran.
je voudrai savoir mon choix est le bon ou si il y a plus simple que de faire une boucle for .merci
deuxieme point : voila je ne sait pas pourquoi mais lorsque je fait en debut de programme #include<string> et #include <string.h> je peut utiliser les string dans mon main , mais je ne peut pas les utiliser (ni initialiser ni rien) dans mes classes (j'ai marquer aussi les includes dans les fichier de mes classes -.-).De cette facon je ne peut pas stoker le nom des images a loader dans des tableaux pour les utiliser avec SDL_LoadBMP("nom du fichier.bmp");
tu n'as pas besoin de lancer plusieurs fonctions en meme temps.
un jeu, c'est :
initialiser();
while(!gameover)
{
recuperer_les_evenements();
evolution();
affichage();
}
liberer();
tu dois te faire une classe "perso" par exemple, et dans "evolution()" tu fais evoluer chaque perso. Mais aucune instruction ne doit etre bloquante
Tu peux imaginer, par exemple, une methode :
perso::setanimation(....) // ici, tu définis ton animation
perso::mise_a_jour(float tempspasse); // ici, tu donnes le temps, tu calcules l'animation courante
perso::afficher(); // a appeler dans "affichage", l'affichage illustre les structures, c'est tout.
quand tu définis une animation, tu la stockes d'une maniere ou d'une autre dans ta classe, mais tu ne bloques pas, tu sors tout de suite.
et quand tu demandes la mise a jour du perso du perso, la classe doit etre capable, toujours sans attendre, de mettre a jour l'image du perso, sa position, tout...
Pour convertir tes string, utilise la méthode c_str(); qui renvoie une chaine de caractères.
Sinon, pour les classes, il faut inclure le fichier à chaque source de la classe.
merci de repondre si vite. mais comment faire pour inclure le fichier a chaque source de la classe ?
ps message a Fvirtman :
merci bocoup je ne comprends pas tout mais je v etudier ce que tu a marqué et je posterai un massage si je ne comprends pas tout.
merci a vous deux
edit:
Fvirtman , je pense que tu doit te tromper(enfin je n'est fait que qelques mois de programmation mais bon arret moi tt de suite si j'ai faux)
tu a dit que le programme doit etre de la forme:
mais si le programme recupere un evenement il passe ensuite a evolution; mais si le programme rentre dans evolution, il ne peut pas recuper un autre evenement en meme temps. donc le programme va attendre que l'animation soit fini pour recuperer un autre evenement et donc faire une autre animation , de cette manniere on ne peut pas faire avancer les deux personnages en meme temps non ? ( je doit peut etre avoir tout faux mais bon) eclaire moi s'il te plait.
Déja, la fonction recuperer_les_evenements() dont je parle n'est pas bloquante non plus : elle utilise (avec SDL), PollEvent : qui est une fonction qui recupere un evenement s'il y en a un, et n'en récupere pas s'il n'y en a pas, mais en aucun cas ne s'arrete
Si tu utilises WaitEvent, met la dans un sac, fait un noeud, et brule la
Aucune fonction qui attend ! faut que ça tourne !
Cette fonction (moi c'est la façon dont je m'en sers), remplis un tableau de booleens : true si la touche est enfoncée, false si elle ne l'est pas.
Ce tableau peut ensuite etre lu par la fonction d'évolution, lu comme un simple tableau : les events sont isolés dans la fonction recuperer_les_evenements(), une fois pour toutes.
PS : je sais que cette technique marche (regarde mes petits projets dans ma signature), ça fait ses preuves
Je te recommande très chaudement SFML qui est un SDL-like que je trouve bien mieux pour le C++ (en C je ne sais pas). Je te conseil de le tester et voir ce qui te plaît le plus
Oui c'est ça: si tu fais une classe, t'auras une source comme "maclasse.cpp" et un header comme "maclasse.h"; en chaque début de *.cpp tu mets un #include <SDL/SDL.h> par exemple.
au fait j'ai une autre question pour Fvirtman mais les autres peuvent repondre;
dans le morceau de code qu'il ma donner je ne voi toujours pas comment executer reelment deux fonction simultanement , alors j'ai fait des recherches et je suis tombrer sur les threads et les mutex .
comme sur tous les forum ou je suis aller personne ne m'a conseiller de les utiliser pour fare mon jeu .je me demande si c un outils a utiliser , alors question : faut-il utiliser les threads et mutex pour faire realiser des actions simultanement dans mon jeux de combat 2d ?
Non; pas de threads dans ton jeu ! Il faut :
1 - Recevoir les évènements
2 - Mettre à jour les infos sur les joueurs (position, vies, etc...)
3 - Afficher ( et le son tiens )
Pour afficher, tu codes une fonction qui affiche une frame de ton animation en fonction du temps écoulé.
Faire des threads n'est pas une bonne idée.
Les treads ne sont pas a voir comme des fonction synchrones simultanées, mais concurentes. J'explique:
Si j'ai deux fonction F et G composées d'instructions (f1,f2 ....) et (g1,g2 ...)
F(){f1;f2;f3}
G(){g1;g2;g3}
Si tu appelles normalement: F()G()
Tu va exécuter tout séquentiellement:
{f1;f2;f3; g1;g2;g3}
Si tu veux exécuter F et G de manière concurente tu va exécuter
f1 g1 g2 g3 f2 f3
ou bien
g1 f1 g2 f2 f3 g3
ou bien autre chose.
Tu aura juste les instruction de F dans l'ordre mélangées avec des instructions de G dans l'ordre.
Pire si tu veux mettre f et g dans une boucle ils seront désynchronisés c'est à dire que tu peux avoir
f1 f2 f3 f1 f2 f3 f1 f2 f3 g1 g2 f1 f2 f3 g3
maintenant si t'as un jeu de baston : f représente les coups du joueur 1 et g ceux du joueur 2, tu vois tout de suite que le mielleur joueur n'est pas le plus habile c'est celui qui est pote avec l'OS et dont la fonction exécute un maximum de taches.
Par conséquent je te conseille la stratégie
1) dépiler tous les évènements
2) traiter tous les évènements
3) afficher en fonction du temps écoulé depuis le dernier affichage
4) retourner à l'étape 1
ugo292002 > non, pas de threads !!
On n'excute pas 2 fonctions en meme temps !
Comme je te disais plus haut, il faut faire des fonctons non bloquantes.
Une animation, ce n'est pas :
- on affiche une image, on attend, on en affiche une autre, on attend.
Non, il faut te sortir cette philosophie de la tete.
Une animation, c'est :
- on déclare que l'animation sera une séquence d'images, on sort faire autre chose
- a chaque tour de boucle (sans jamais de wait), on fait évoluer : c'est a dire qu'on prépare une fonction qui, en fonction du chronometre présent, et de ce qu'on lui a déclaré au début (la séquence d'images) va afficher la bonne image, mais SANS JAMAIS DE WAIT.
Je suis un peu embeté que tu me parles encore de "2 focntions simulténament", ça veut dire que tu n'as rien compris a ce que j'ai mis plus haut Et comme ce que je viens de mettre ici est la meme chose exprimé d'une autre façon, j'ai peur que ça ne serve a rien
d'accord merci bocoup maintenant je pense etre fin pret pour pouvoir realiser mon jeux
si j'ai une autre question je la poserai ici
merci infiniment
edit: effectivment je souhaite avoir votre avis aussi sur un point
j'hesite sur le point de stockage des sprites de mes personnage;
j'avais tout d'abors penser a les stocker dans les tableaux eux meme placer dans la classe du personnage
pour pouvoir les utuliser dans ma fonction main de maniere plus ordonnée, est-ce le bon choix ?
(dans ma classe {on va dire que mon perso s'appelle KEN -.-(pour cahnger)} KEN j'ai donc autant de tableau que d'annimation possible du personnage (sauter[] , attendre[], avancer[], ...)
merci de me dire si mon choix est le bon s'il vous plait .
Si tu veux pousser le vice tu peux même faire un tableau de tableau
J'ai pas tout lu mais ça dot être ça et pour animer ton image tu change d'image tout les tantôt.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
* Un wrapper C++ pour sqlite * Une alternative a boost units
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
* Un wrapper C++ pour sqlite * Une alternative a boost units
* Un wrapper C++ pour sqlite * Une alternative a boost units
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html