Salut salut !
Alors voilà, je suis en fasse d'une difficulté pas trop pratique.
C'est la première fois que je fais appelle à ce forum et je n'ai pas trouvé de section plus adaptée alors si je suis au mauvais endroit veillez m'en excuse.
Sachez que la situation est grave ! Dit il en prenant un air faussement sérieux. Cela fait 24 heures que j'ai posté mon soucis sur un autre site et pas une seul réponse...
Et je me rends compte que les gens vraiment pointus en java sont plutôt ici... Du coup je viens ici pour trouver quelqu'un capable de répondre à mon soucis !
Mon jeu comporte quelques thread afin de gérer ces différents éléments. L'un deux me pose des soucis.... C'est celui du pathfinder !
Besoin du pathfinder à couvrir :
-trouver un chemin dans un thread différent afin d'animer le personnage.
-pouvoir lancer un nouveau déplacement et donc interrompre le précédent a la fin de sont animation (celle du déplacement d'une case à l'autre)
J'ai tenté plusieurs solutions pour ça mais aucunes n'as réellement marché à 100%.
Actuellement je lance le thread unique du pathfinder (au lieux d'en créer un nouveau à chaque fois et le fermer juste après) qui à une méthode run() avec une boucle infinie qui lance un replacement des que certaines variables le permettent.
Il faut savoir qu'a chaque boucle de recherche de la prochaine case, lorsqu'il y à déplacement je fais appelle à un sleep pour les animations.
Ca marche très bien, je clique, mon personnage bouge, arrive à destination. Je clique à nouveau, ça remarche. Le soucis est lorsque je veux spammer le déplacement (déjà pour interrompre un trajet précédent) les variables ne se mettent pas correctement à jour et surtout le thread passe en BLOCKED....
Pourtant les méthodes sont synchronisée et les variables utiles sont en volatile...
Comment feriez vous pour laisser un thread ouvert dans un coin (ou bien en ouvrir un à chaque fois, mon jeu est bien optimisé, je m'en fiche si c'est juste pour le pathfinder) capable d'être appelé à n'importe quel moment, même s'il est en pleins pour qu'il puisse se quitter des la fin de sa boucle afin de recommencer ces boucles des le début avec de nouvelles données ?
Merci d'avance, en espérant que quelqu'un sauras m'éclairer un peut !
Partager