Salut
Comment doit on gerer les vagues d ennemis .. j ai essayer avec un timer mais cela fait ralentir l ensemble
Merci d avance
Version imprimable
Salut
Comment doit on gerer les vagues d ennemis .. j ai essayer avec un timer mais cela fait ralentir l ensemble
Merci d avance
Bonjour,
Pouvez vous être plus précis ?
Parlez vous du spawn des ennemies par vague et de la gestion de déplacement par la vague ?
Surtout du spawn des ennemis ; mais les deux m interesse.
J ai mis un Timer en place qui toutes les n secondes genere des nouveaux ennemis.
Comment peut on optimiser la gestion des collisions entre les projectiles et les ennemis ? pour le moment je gere cela dans l Update des projectiles qui verifie si ils intersect avec les ennemis.
:D
Tu spawn combien d'ennemis c'est sur que la gestion des collisions ca peut ralentir.
Pour le moment 1 par seconde...
Et comment tu fais ta gestion de collision?
J ai une liste avec tout les ennemis et dans l objet projectile je vérifie si il n intersect pas avec l un des objets "ennemis"
Combien y a t-il d'éléments lorsque cela rame ?
Sinon, pour les optimisations de collisions, on utilise de la hiérarchisation de l'espace (Space partitionning), dans le genre, il existe le quad tree, ou le binary space partitionning (BSP).
Cela permet d'éviter de faire des tests, en testant que les éléments proches ou dans un zone précise.
cela rame des que je tire ; il doit y avoir ~20 objets pour tout (enemis,projectiles, etc...)
Si tu as 20 ennemis et 20 projectiles ca fait deja 400 check de collision deja.
Tu ne fais pas un test de collision pixel perfect?
Une technique de collision plutôt lente...
Si tu fais du xna tu peux essayer de regarder par exemple le moteur physique farseer. Sauf si tu tiens a tout contrôler.
Voici mon bout de code
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 public override void Update(GameTime gameTime) { VectorPosition += Direction * Speed; IList<IGameObject> list = LayerManager.Instance.GetObjects("Bullet"); foreach (IGameObject item in list) { Rectangle r = new Rectangle((int)item.Position.X, (int)item.Position.Y, item.HitBox.Width, item.HitBox.Height); bool res = HitBox.Intersects(r); if (res) { item.Alive = false; this.Alive = false; break; } Debug.WriteLine(res); } base.Update(gameTime); }
La première question c'est : est-ce que ça rame si tu vires le test de collision ? :)
Faire ceci pour chaque sur chaque bullet me semble gourmand : IList<IGameObject> list = LayerManager.Instance.GetObjects("Bullet");
dans la mesure où je suis certains que GetObjects parcours tous les éléments du monde.
Le plus simple serait de gérer les collisions dans un manager afin d'éviter ça.
Mais sinon mis à part si ton HitBox.Intersects(r); est super lourd ton bout de code ne devrait pas ralentir tant que ca pour 20 éléments.
Tu ne testerai pas ton projet avec visual attaché et donc ca ne ramera plus une fois que tu auras viré cette ligne :
Debug.WriteLine(res);
?