|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre à l'essai
![]() Jérémy DUTHEIL Étudiant Inscription : avril 2009 Messages : 62 ![]() |
Bonjour à tous,
Actuellement en plein développement d'un projet de Bomberman, je me trouve confronté à un étrange problème. Ma classe "Player" doit posséder un certain nombre de bombes (qui sont représentées par une classe Bomb) ; j'ai choisi de créer un attribut de type vector contenant des pointeurs vers des objets bombe. Pourquoi un vector de pointeurs ? Car ma classe "Bomb" dérive de sf::Thread (pour gérer la minuterie de la bombe), et ne peut donc pas être "copiée" dans un vecteur classique. Seulement, il se trouve que ce vecteur de pointeurs présentait des fuites mémoires (étant donné que les objets alloués n'étaient pas désalloués lors du pop_back). N'ayant pas réussi à faire ceci, j'ai essayé avec un vecteur de shared_ptr contenant chacun un objet de type bombe... Et bien ça compile, mais j'ai l'erreur suivante lorsque je veux poser une bombe : "An internal OpenAL call failed in sound.cpp (100) : AL_INVALID_NAME, an unaccept name has been specified" Auriez-vous une idée pour résoudre mon problème svp ? Voici la partie de mon code qui nous intéresse : Code :
std::vector<boost::shared_ptr<Bomb> > m_bombs; Code :
|
||
|
|
00
|
|
|
#2 |
![]() ![]() Développeur informatique Inscription : avril 2003 Messages : 10 651 ![]() |
Salut
L'erreur n'a plus rien à voir avec ton problème : c'est une erreur OpenAL, donc liée au module audio. Il faudrait que tu isoles la ligne qui provoque l'erreur, et que tu nous montres le code correspondant. PS : Bomb qui dérive de sf::Thread... ça sent l'erreur grossière. Tu as voulu faire quoi avec cette conception de classe ?
__________________
Mieux que SDL : découvrez SFML |
|
|
00
|
|
|
#3 | |
|
Membre à l'essai
![]() Jérémy DUTHEIL Étudiant Inscription : avril 2009 Messages : 62 ![]() |
Citation:
Concernant ma classe Bomb, elle dérive des éléments private comme proposé dans ce tuto : http://www.sfml-dev.org/tutorials/1....threads-fr.php L'idée, c'est que le joueur pose une bombe, et que celle-ci se gère toute seule (explosion après 3s par exemple) dans un thread annexe étant donné qu'il ne faut pas bloquer le reste du programme. J'ai upload l'ensemble de mon code, peut-être est-ce que ça vous aidera à y voir plus clair ? http://www.jeremy-dutheil.fr/projects/Bomberman.rar |
|
|
|
00
|
|
|
#4 | |||
![]() ![]() Développeur informatique Inscription : avril 2003 Messages : 10 651 ![]() |
Citation:
En gros, si tu lances un thread pour chaque objet qui doit gérer un timing, être animé, réflechir ou faire n'importe quoi qui dure un certain temps, tu vas vite tuer ton programme (chaque nouveau thread ajoute du stress à l'OS, qui doit gérer tout ce monde). L'idée c'est plutôt de gérer tous tes objets dans le même thread, en leur donnant la main régulièrement un court instant pour qu'ils se mettent à jour en fonction du laps de temps écoulé. Comme tu as une boucle principale qui carbure à plein de tours par seconde, ça se fait très bien. Code :
__________________
Mieux que SDL : découvrez SFML |
|||
|
|
00
|
|
|
#5 |
|
Membre à l'essai
![]() Jérémy DUTHEIL Étudiant Inscription : avril 2009 Messages : 62 ![]() |
Ok je vais essayer ça, merci.
|
|
|
00
|
|
|
#6 |
|
Membre actif
![]() |
Je réalise également un Bomberman en SFML qui est assez bien avancé -> Bomberman SFML, tu peux trouver les sources en fouillant sur le topic.
je confirme ce qu'a dit Laurent, un simple compteur dans ta classe suffit largement, simple et efficace ^^. De plus avec les threads si tu mets le jeu en pause tu serais obligé de mettre en pause chaque thread, alors qu'il suffit d'indiquer qu'il n'y pas de temps écoulé avec un compteur. |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com