Pages: 1
- Accueil forums
- » Routines
- » C++ CEventReceiver pour une personnage vue à la 3ème personne
26-01-2010 19:32:29
- jonath313
- Membres
- Date d'inscription:
- Messages: 240
- IP: 195.221.123.215
- Courriel
Tenez les ptits gars je suis généreux je vous donne mon travail qui a monopolisé mon petit cerveau de graphiste pour m'orienter vers la programmation.
Ce code sert au déplacement d'un personnage à la troisiéme personne et autorise le déplacement avant, arrière, droite et gauche dans la direction où le personnage s'auriente, en utilisant l'animation marcher.
Il est constitué de 3 fichier :
- 1 main
- 1 CEventReceiver.cpp
- 1 CEventReceiver.h
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | |
voila il demande à être optimisé car je suis seulement débutant dans la programmation ... J'aimerais avoir vos avis svp merci
Hors ligne
26-01-2010 23:20:57
- jonath313
- Membres
- Date d'inscription:
- Messages: 240
- IP: 195.221.123.215
- Courriel
A oui j'oubliai, j'ai repris le tutorial de ramis pour le compléter par le changement de direction ! merci ramis !
Hors ligne
27-01-2010 09:56:35
- Hawk
- Membres
- Date d'inscription:
- Messages: 91
- IP: 91.103.40.50
- Courriel Site web
Bon tutoriel, mais j'ai quelques questions/remarques.
Code c++ :
m_animrun=true;//et comme l'animation n'est du coup pas "courir" , on met notre booléen à false aussi
Ben pourquoi il est à True alors ? Faut d'inattention je suppose.
Code c++ :
if(m_Nmodele != 0 && m_isAvance == true)
{
c.X += speed * cos((d.Y) * 3.14 / 180);
c.Z -= speed * sin((d.Y) * 3.14 / 180);
}
if(m_Nmodele != 0 && m_isRecule == true)
{
c.X -= speed * cos((d.Y) * 3.14 / 180);
c.Z += speed * sin((d.Y) * 3.14 / 180);
}
Là, il y a une petite optimisation à faire. Juste avant, tu a calculé diry qui est en fait d.Y en degré + 90°
or cos( a + 90) = - sin (a)
et sin (a + 90) = cos (a)
Donc cos (d.Y) = sin (diry)
et sin (d.Y) = - cos (diry)
(le tout en degré)
Du coup, ton code devient :
Code c++ :
if(m_Nmodele != 0 && m_isAvance == true)
{
c.X += speed * sin(diry);
c.Z -= speed * - cos(diry));
}
if(m_Nmodele != 0 && m_isRecule == true)
{
c.X -= speed * sin(diry);
c.Z += speed * -cos(diry);
}
Enfin, ton code est juste quand même
Code c++ :
m_Nmodele->setRotation(d);
int xf = (c.X-sin(diry)*125);
int yf = (c.Z-cos(diry)*125);
int zf =100;
m_Nmodele->setPosition(c);
Là, j'ai l'impression que tu calcules un x, un y et un z que tu n'utilises pas . A quoi servent-ils ?
Hors ligne
27-01-2010 12:07:26
- jonath313
- Membres
- Date d'inscription:
- Messages: 240
- IP: 195.221.123.215
- Courriel
Dans mes dernière modif j'ai échangé EMAT_STAND et EMAT_RUN car la condition était à corriger :
m_Nmodele->setMD2Animation(EMAT_STAND);//on passe à l'animation "courir"
m_Nmodele->setMD2Animation(EMAT_RUN);//on arréte
Cependant je suis un vieu flémard c'est pour cela que j'ai pas changé les commentaires! ![]()
Effectivement tes améliorations sont juste mais bon pourquoi faire simple quand on peut faire compliqué ! non enfait c'est que j'ai posté ce code dès qu'il a été fonctionnel alors je ne l'ais pas optimisé directement.
Pour les variables qui ne servent à rien, effectivement elle servent à rien ... ce code à besoin d'être réorganisé et mis au propre car je suis un peu bordélique.
Hors ligne



