#0 

01-03-2007 20:03:48

dark calculator
Abonné
Date d'inscription: 25-02-2007
Messages: 153

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 wink

Hors ligne


#1 

01-03-2007 22:45:21

Jerry Kan
Habitué
Date d'inscription: 21-11-2006
Messages: 265

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


#2 

01-03-2007 23:37:02

dark calculator
Abonné
Date d'inscription: 25-02-2007
Messages: 153

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


#3 

02-03-2007 13:52:14

Jerry Kan
Habitué
Date d'inscription: 21-11-2006
Messages: 265

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  smile

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 :

Code:

int Game_Interface::draw_frame(){


    if(device->run() && driver){
                
      driver->beginScene(true, true, video::SColor(255,100,101,140));
      scenemgr->drawAll();
      guienv->drawAll();
      
    }

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


#4 

02-03-2007 14:14:16

dark calculator
Abonné
Date d'inscription: 25-02-2007
Messages: 153

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


#5 

02-03-2007 17:40:01

izguit
Administrateur
Lieu: 127.0.0.1
Date d'inscription: 14-09-2006
Messages: 306
Site web

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


Athlon 64 3000+ // 1Go RAM // Geforce 6600GT 128Mo
Turion 64 X2 // 1Go RAM // ATI X1250

Hors ligne


#6 

03-03-2007 10:30:51

Jerry Kan
Habitué
Date d'inscription: 21-11-2006
Messages: 265

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


Options Liens officiels Caractéristiques Statistiques Communauté
Corrections
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
883 membres
1429 sujets
11121 messages
Dernier membre inscrit: Saidov17
65 invités en ligne
Aucun membre connecté
RSS Feed