Structure des threads pour un jeu

Fermé
ghFrankfurt Messages postés 207 Date d'inscription mardi 16 novembre 2010 Statut Membre Dernière intervention 10 décembre 2014 - Modifié par ghFrankfurt le 5/09/2013 à 12:31
 davs63 - 26 févr. 2014 à 11:36
Bonjour,

Je suis actuellement entrain de développé un jeu en 2D en utilisant py-sfml.
Pour ce jeu, j'utilise une méthode de chargement en temps réel de la map, avec comme source un fichier xml.

J'ai eu pas mal de problème concernant les threads.
Initialement, je faisais les updates graphique et les inputs dans la boucle principale et threader le chargement de la map. Une erreur. Le thread est trop lent et en multiprocessing je n'arrive pas à ressortir le tableau de vertexArray pour mettre à jour le les graphismes.

Je pense que je m'y prend de la mauvaise manière, je pense que je dois revoir ma logique concernant "qui fait quoi"

J'imagine globalement une autre manière de faire :

La boucle principale :
-Elle s'occupe de lire le xml
-Charge les vertexArray (map) -> transmet au thread 1
-Charge les entités (ennemis, objets, ...) -> transmet au thread 1

Thread 1 :
-Récupère les inputs
-Gère la caméra -> transmet à la boucle principale pour l'emplacement xml et au thread 2 pour les collisions
-Met à jour les graphismes

Thread 2 :
-Calculs de collision


J'ai juste peur que les threads soient trop lent pour gérer ça. C'est le premier projet auquel j'utilise des threads et je pense que ma compréhension de ceux ci n'est pas encore vraiment acquise.

Avant de me (re)lancer un peu tête baissée, j'aurais bien voulu avoir vos avis sur la structure à utiliser.

Je vous remercie d'avance :)




A voir également:

2 réponses

nar6du14 Messages postés 459 Date d'inscription dimanche 27 décembre 2009 Statut Membre Dernière intervention 7 décembre 2013 64
22 sept. 2013 à 17:17
utilises python 3.3 au moins...pas besoin de mutex
0
Salut !

J'essai moi aussi de faire un jeu a base de tileset/tilemap en utilisant PySFML. J'ai du mal a comprendre ton probleme car en générale on utilise des Thread pour faire des chose qui doivent être exécuter en parallèle ce qui n'est pas forcement le cas de l'affichage d'une carte. A la limite pour les objets qui bougent avec une petite IA.

Enfin je suppose qu'au bout de 4 mois tu as du réussir sur les Thread, est ce que ça t'a vraiment apporté quelque chose ? et comment a tu organisé tout ca ?

Sinon j'aimerai savoir si tu sais utiliser les shaders ? je bloque total la dessus
0
ghFrankfurt Messages postés 207 Date d'inscription mardi 16 novembre 2010 Statut Membre Dernière intervention 10 décembre 2014 23
25 févr. 2014 à 16:24
Salut, non malheureusement j'ai fait une pause car j'ai été embarqué dans divers projets web etc.. J'ai plus eu le temps de me pencher dessus.

Du coup je n'ai pas encore utilisé de shaders, je n'ai pas vraiment idée de la manière dont ils fonctionnent, mais je peux peut-être essayer de t'aider?

Autrement, le problème que j'avais sans thread, c'est que charger/décharger la map en temps réel dans la boucle principale me faisait un micro lag général à chaque fois que je changeais de zone.
Mon but étant de le faire en dynamique, permettant d'avoir une très grande map sans surcharger la mémoire et sans avoir de temps de chargement, excepté le premier qui est très rapide.
0
Oui oui je comprend, effectivement tu n'a pas d'autre choix, j'essaierai surement de faire la même chose pour tester. Et aussi tester les Threads de Sfml pour voir si ils apportent quelque chose par rapport au Thread de python.

La seul fois ou j'ai eu besoin de "Threader" c'est pour un serveur de socket xml ou chaque client est un Thread, mais j'ai pas encore bien saisie le concept de "concurrence" et donc de verrouillage des Thread. Surtout que je vais en avoir besoin car avant de faire mon moteur de Rpg online/coop je fais un petit Bomberman online histoire de bien me familiariser avec py sfml

Pour les Shader j'arrive à les utiliser quand ils sont pas trop complexe, par contre les créer, la c'est une autre histoire :) je verrai ça quand j'aurai un peu plus d'expérience.

Je compte partager mon expérience et mes recherches python / sfml sur un site perso dans peu de temps, une fois mon bomberman sur pied
0