#0 

10-02-2010 23:47:22

jonath313
Abonné
Date d'inscription: 28-12-2009
Messages: 240

Voila enfait j'utilise setFrameloop qui joue les frames de mon animation en boucle mais le soucis c'est que je voudrais juste jouer l'animation une seule foi et qu'elle se réinitialise a la première frame. Malheureusement setEndFrame n'existe pas comment puis-je faire ?

Hors ligne


#1 

11-02-2010 00:36:54

nabouill
Abonné
Date d'inscription: 17-09-2009
Messages: 242
Corrections: 1

pour ça tu as un truc pour recupérer la frame en cour, du coup imaginons que tu as une animation de 100 frames. Si j'ai bien compris, tu veut jouer toutes les frames et quand tu arrive a la 100em l'animation revient a la 1er et y reste.
L'idée:

Code c++ :


//tu lance l'animation a un personnage
perso->setFrameLoop(1,100);

while(device->run())
{
    ...........
        //on creer une variable pour récupérer la frame actuel
        int frameEnCour = perso->getFrameNr();

        //on verifie si on est arrivé a la frame a la quel on souhaiterait que ça s'arrete
        if(frameTemp == 100)
        {   
              //on bloque l'animation ou on veut
              perso->setFrameLoop(1,1);
        }
  .............
}



ps: il y a parfois des petits bug du genre il ne récupèrera jamais la frame 100, il s'arretera a 99 !! je n'ai jamais pus savoir si ça venait des models ou de Irrlicht, mais je préfère le souligné car je me rappel avoir perdu pas mal de temps sur ce truc là.

Bon courage.

Dernière modification par nabouill (11-02-2010 00:38:22)


mes sites: www.manga-vf.fr et www.series-vf.fr

Hors ligne


#2 

11-02-2010 00:42:35

jonath313
Abonné
Date d'inscription: 28-12-2009
Messages: 240

merci beaucoup !

tu me simplifie la vie j'étais entrein de chronométré mon animation et d'essayer de faire passer setAnimation à 0 speed au bout d'un certain temps mais bon c'est vraiment idiot mon idée !

Hors ligne


#3 

11-02-2010 00:59:11

jonath313
Abonné
Date d'inscription: 28-12-2009
Messages: 240

if(frameTemp == 100)

Pourquoi frameTemp si on déclare FrameEnCour ?

Cela ne fonctionne pas :

       //on creer une variable pour récupérer la frame actuel
        int frameEnCour = Nbras->getFrameNr();


////////////////////////////////////////////////////////////////////////////////
////////////////////////////// BOUCLE DE RENDU 3D///////////////////////////////
////////////////////////////////////////////////////////////////////////////////

    while (device->run())
    {
        driver->beginScene(true,true,irr::video::SColor(0,200,200,200));

        //on verifie si on est arrivé a la frame a la quel on souhaiterait que ça s'arrete
        if(frameEnCour == 20)
        {
              //on bloque l'animation ou on veut
              Nbras->setFrameLoop(1,1);
        }
}

Le bras joue son animation sans s'arréter
        sceneManager->drawAll ();
       // gui->drawAll();

        driver->endScene ();
    }
        device->drop ();

        return 0;

}

Hors ligne


#4 

11-02-2010 01:12:03

nabouill
Abonné
Date d'inscription: 17-09-2009
Messages: 242
Corrections: 1

STP utilise les balise de code, ce serait plus lisible, sinon :

jonath313 :

Pourquoi frameTemp si on déclare FrameEnCour ?


Désolé, c'est mon copier coller de mes bout codes, frameTemp était en faite frameEnCour.

Aussi, je ne comprend pas bien ton code, moi je voyait plutot un truc du genre:

Code c++ :

//tu lance l'animation a un personnage
perso->setFrameLoop(1,100);

while(device->run())
{
        //on creer une variable pour récupérer la frame actuel
        int frameEnCour = perso->getFrameNr();

        //on verifie si on est arrivé a la frame a la quel on souhaiterait que ça s'arrete
        if(frameEnCour == 100)
        {   
              //on bloque l'animation ou on veut
              perso->setFrameLoop(1,1);
        }

        driver->beginScene(true,true,irr::video::SColor(0,200,200,200));
        sceneManager->drawAll ();
        driver->endScene ();
}

device->drop ();



Il faut récupérer la frame dans ta boucle, quand tu fait "int frameEnCour = perso->getFrameNr();" frameEnCour est égale a ta frame a l'instant même ou elle se deroule.

Dernière modification par nabouill (11-02-2010 01:17:53)


mes sites: www.manga-vf.fr et www.series-vf.fr

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
76 invités en ligne
Aucun membre connecté
RSS Feed