Bonjour,
J'ai un probleme assez dur a expliquer, désoler si vous avez du mal a comprendre.
Je suis en train de créée mon premier jeu et j'en suis a l'AI (modele en MD2)
j'ai donc crée un tableau de struct conntenant les infos des modeles,ça c'est ok il s'affiche tous ... mais lorsque que je met un peut trop de fonction comme Distance() (3DMATH.cpp) j'ai des ennemis qui disparaisent,
quand j'envele un distance() , un ennemi reveint ! pourtant il doit avoir seulement 2 ou 3 Distance() !
voila les fonctions:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 void Cours_ennemie(float x, float z, int IdEnnemi) { CVector3 Tempo; Tempo.x=x; Tempo.z=z; if(Distance(Tempo, ennemi[IdEnnemi].Pos)>20.5) { ennemiMDL[IdEnnemi]->setAnim(animList[13]); CVector3 go_to2 = g_Camera.ObjetGoTo(x, z, ennemi[IdEnnemi].Pos.x,ennemi[IdEnnemi].Pos.y,ennemi[IdEnnemi].Pos.z); ennemi[IdEnnemi].Pos.x+=go_to2.x*2.0; ennemi[IdEnnemi].Pos.y=15.5; ennemi[IdEnnemi].Pos.z+=go_to2.z*2.0; ennemi[IdEnnemi].angle=trouver_angle(x, z, IdEnnemi)+90; } else { ennemiMDL[IdEnnemi]->setAnim(animList[15]); ennemi[IdEnnemi].angle=ennemi[IdEnnemi].angle_poste; } }et la boucle draw :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 void Ennemi() { for (int en = 0; en < nombre_ennemire; en++) { glPushMatrix(); double distance = Distance(ennemi[en].Pos, g_Camera.m_vPosition); if(!ennemi[en].Alerte) Cours_ennemie(ennemi[en].Poste.x, ennemi[en].Poste.z, en); if(distance<400) { ennemi[en].Alerte=true; if(distance<300) ennemi[en].onFire=true; else ennemi[en].onFire=false; } ennemiMDL[en]->drawPlayerItp(bAnimated,static_cast<Md2Object::Md2RenderMode>(renderMode), ennemi[en].Pos.x,ennemi[en].Pos.y,ennemi[en].Pos.z, 0.0,0.0,0.0,ennemi[en].angle); glPopMatrix(); } }
dans cette exemple au lieu d'avoir 3 ennemies j'en ai qu'un seul
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 static void draw3D () { glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity (); g_Camera.CheckCameraCollision(g_vWorld, g_NumberOfVerts); g_Camera.Look(); g_Camera.Update(); glEnable (GL_DEPTH_TEST); glCallList(cube); // le décors Ennemi(); glDisable (GL_LIGHTING); glDisable (GL_TEXTURE_2D); glDisable (GL_DEPTH_TEST); }
merci de votre aide !
ps : glut , c++
Partager