Bonjour à tous =D,
j'essaie de faire un "Zelda-like" en Java avec libgdx, et comme je pourrais avoir beaucoup d'ennemis sur ma carte, j'ai opté pour l'utilisation de Threads.
Cependant, quand il commence à y avoir plus d'une quinzaine de Threads, mon programme commence à montrer des signes de ralentissements.
Voici un peu la logique de ce que j'ai fais :
- Une classe "Ennemi" hérite de Thread
- Un ennemi bouge de manière aléatoire et à chaque pas, il vérifie s'il ne rencontre pas un obstacle...
- ... pour cela, il accède à une Collection de Rectangle (qui représentent les obstacles) pour vérifier s'il ne va pas entrer en collision.
- ... cette Collection est partagée entre tous les ennemis (et le joueur aussi); elle fait partie d'un Singleton.
Je pense que ça ralentit à cause de cet accès concurrentiel à la Collection mais j'aimerais bien avoir votre avis parce que je ne suis pas expert en Thread.
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
22 synchronized (InfosSingleton.getInstance().getCollisionObjects()) { for (MapObject obj : InfosSingleton.getInstance().getCollisionObjects()) { String typeTerrain = (String) obj.getProperties().get("type"); RectangleMapObject rectMapObject = (RectangleMapObject) obj; Rectangle rectObject = rectMapObject.getRectangle(); if(Intersector.overlaps(rectObject, rectangleColl)){ if(obj.getProperties().get("type") != null){ if("Brulable".equals(typeTerrain) && !enTrainDeBruler){ situationEnnemi = SituationEnnemi.BRULER; } else if("Tombable".equals(typeTerrain)){ situationEnnemi = SituationEnnemi.TOMBER; } else if("Sautable".equals(typeTerrain)){ situationEnnemi = SituationEnnemi.BLOQUER; } } else{ situationEnnemi = SituationEnnemi.BLOQUER; } } } }
Peut-être que je me trompe et que vous aurez une autre idée =D.
Merci d'avance![]()
Partager