salut a tous
Je voudrait faire une fenetre de chargement pendant que se charge la scene mais je ne sait pas trop comment faire pour faire les drawall and co durant la creation de la scene une solution qui est surement la seul est d'utiliser les threads mais sa va encore compliquer mon prog que je voulais simple. Donc si quelqu'un c'est deja poser le probleme et qu'il la resolue pourrait t'il me dire comment il a fait.
dark calculator
PS: un exemple serait le bienvenue mais ne vous casser pas la tete
Hors ligne
bon j'en ai jamais codé de vrai qui fasse ca,
mais si je dejais, je m'y prendrai comme ca :
tu crée une classe loadbarre avec la méthode augment(int taille)
puis tu fait tes chargement comme ca :
barre.init_barre()
chargement 1
barre.augment(x);
chargement 2
barre.augment(x);
etc
etc
pour la valeur de x, soit tu met 1/ (nb_chargement)
soit tu est super pointilleux, auquel cas tu peux augmenter ta barre proportionnellement a l'importance du truc que tu viens de charger
si tu sais que le chargement des musiques est super long, alors tu augmente ta barre plus que le chargement d'une mini texture
cette deuxieme méthode est bien sur tres empirique,
de facon générale il est tres dur de coder une barre de chargement efficace, (regarde les barres windows, et la toute relativité des minutes windows), parce que tu ne saura jamais si une opération encore a effectuer ne va pas durer super longtemps
donc tout ce que tu peux faire, c'est augmenter ta barre proportionnellement a l'importance (estimée par toi) de l'opération qui viens de se terminer
Hors ligne
En fait ceci n'est pas le plus important (enfin si m'est pas le plus dur) en fait mon plus gros probleme vient du fait que l'ecran ne serat pas mis a jour quand la barre augmenterat donc on la verrat jamais.
Voila sinon j'utiliserait surment ta methode de barre et pour l'exactitude ce n'est pas trop grave apres tout c pas super important
enfin merci
dark calculator
Hors ligne
dark calculator :
En fait ceci n'est pas le plus important (enfin si m'est pas le plus dur) en fait mon plus gros probleme vient du fait que l'ecran ne serat pas mis a jour quand la barre augmenterat donc on la verrat jamais.
pourquoi ? suffit de faire un refresh de l'image apres chaque chargement
je m'explique, dans ta boucle principale, tu ne fait aucun calcul irrlicht: tu fait simplement :
while( ok ){
classe_graphique.draw_image();
classe_sonore.make_sound();
}
jusque la ok ?
bon, ben avant de rentre dans la boucle tu fait :
chargement_1();
barre.augment(x);
classe_graphique.draw_image();
...
chargement_2();
barre.augment(x);
classe_graphique.draw_image();
etc etc ..
dans ta classe graphique, tu met une méthode draw_image dans laquelle tu met ce que tu vois dans les boucles infinies des exemples irrlicht, mais sans boucle :
(en fait on a fait "monter" la boucle dans une classe plus générale, et on appelle une fonction de la classe graphique sans boucle
genre comme ca :
bien sur, si une autre fenetre passe devant, ou que tu redimentionne la fenetre, l'affichage ne sera probablement pas rafraichit, mais il doit y avoir un moyen pour récuperer ce genre d'évènement dans la fonction onEvent et déclancher un rafrichissement d'image
Hors ligne
Oui je voulais savoir si ca marcherait comme ca mais a mon avis ca fait pas genial : impression de ralentissement, pas fluide et puis sa surcharge le code quand meme mais bon ...
Enfin merci de t'etre penche sur mon probleme
Hors ligne
pourquoi impression de pas fluide?
Une barre de progression c'est jamais fluide, j'aurais fais un truc du style de Jerry. Tu refresh la barre de progression, ton fond c'est une image je suppose, donc ca fera comm dans tous les chargements
Hors ligne
dark calculator :
Oui je voulais savoir si ca marcherait comme ca mais a mon avis ca fait pas genial : impression de ralentissement, pas fluide et puis sa surcharge le code quand meme mais bon ...
en fait, je pense que tu as une vision trop utilisateur de la barre, il n'est pas vraiment possible et raisonable de mettre a jour la barre alors que tu est en plein milieu d'une opération, a ma connaissance, ya pas d'api qui te permette de savoir que tu en est a 60% du chargement du modele X
si tu veux faire propre, tu met tes chargement dans un tableau, et tu le parcours avec un boucle, style
while( tout chargé) {
charger(T[x])
augementer(poids[X]);
draw_frame();
}
meme si tu multithreade le résultat sera exactement le meme, parce que ce tu va faire, c'est charger un truc, et augmenter un compteur, tandis que ton thread chargement va scruter ce compter pour raffraichir l'image
Hors ligne