Bonjour à tous ^^, je code un petit shoot'em up et j'ai un problème pour la génération de nouveaux astéroïdes.
Mon code n'en génère tout simplement pas :/
Voici le code où est gérer cette partie ( plus tard il ne seras plus dans cette méthode car ce n'est pas ce qu'est censé faire la méthode actuel, mais je test ici pour le moment )
void CometSystem::update()
{
for( size_t i{0}; i < cs_comets.size(); i++ )
cs_comets[i].updatePosition();
if( cs_comets.size() < cs_par_cometLimit )
{
if(cs_gen_next_set)
if( cs_clk.getElapsedTime() > cs_gen_spawn_next )
{
add(1);
cs_gen_spawn_next = tl::randomTime(cs_gen_spawn_min, cs_gen_spawn_max);
cs_clk.restart();
}
else
{
cs_gen_spawn_next = tl::randomTime(cs_gen_spawn_min, cs_gen_spawn_max);
cs_gen_next_set = true;
}
}
}
La méthode update est appelé toute les millisecondes
cs_comets : vecteur où sont stocké les comets(astéroïdes) : type std::vector<Comet>
cs_par_Limit : limite de comets dans le jeu : type unsigned short
cs_gen_spawn_min : temps minimum avant l'apparition d'une nouvelle comet : type mutable sf::Time
cs_gen_spawn_max : temps maximum avant l'apparition d'une nouvelle comet : type mutable sf::Time
cs_gen_spawn_next : temps avant l'apparition d'une nouvelle comet : type sf::Time
cs_gen_next_set : booléen qui défini si un temps avant la prochaine apparition d'une comets à été définit ( false dès la construction de l'objet puis toujours true car reset automatique de cs_gen_spawn_next )
randomTime permet, comme sont nom l'indique, de récupérer un temps aléatoire entre une certaine intervalle
add(1) permet d'ajouter une comet
Code de tl::randomTime
sf::Time tl::randomTime( sf::Time const &min, sf::Time const &max )
{
std::uniform_int_distribution<> dist(min.asMilliseconds(), max.asMilliseconds());
sf::Time time(sf::milliseconds(dist(rEngin)));
return time;
}
Initialisation des variables
cs.setLimit(20);
...
cs.setSpawnTime(sf::seconds(5), sf::seconds(10)); // cs = CometSystem
.../...
void CometSystem::setSpawnTime( sf::Time const &min, sf::Time const &max )
{
cs_gen_spawn_max = max;
cs_gen_spawn_min = min;
}
Je pense que je ne sais pas du tout utiliser sf::Time, j'ai beau regarder la doc, un truc doit m'échapper :/
Une idée de ce qui ne vas pas ?
Je vous remercie
Edit :
Ou alors le problème vient de la clock mais je crois qu'elle a un thread dédié non ?