Multithread - optimisation à cause de ralentissements
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.
Code:
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;
}
}
}
} |
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.
Peut-être que je me trompe et que vous aurez une autre idée =D.
Merci d'avance ;)