trop de fonction dans draw(); -> bug ?
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:
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;
}
} |
Code:
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();
}
} |
et la boucle draw :
Code:
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);
} |
dans cette exemple au lieu d'avoir 3 ennemies j'en ai qu'un seul
merci de votre aide !
ps : glut , c++