Ceci est un ancien message mais il apparaît toujours, alors je voulais ajouter mes 2 cents ici.
Liste des premières données qui doivent être stockées dans le thread d'interface utilisateur / d'affichage vs thread logique. Dans le fil d'interface utilisateur, vous pouvez inclure un maillage 3D, des textures, des informations sur la lumière et une copie des données de position / rotation / direction.
Dans le thread de logique de jeu, vous pourriez avoir besoin de la taille de l'objet de jeu en 3D, des primitives de délimitation (sphère, cube), des données de maillage 3D simplifiées (pour les collisions détaillées par exemple), tous les attributs affectant le mouvement / le comportement, comme la vitesse de l'objet, le taux de rotation, etc., et également des données de position / rotation / direction.
Si vous comparez deux listes, vous pouvez voir que seule une copie des données de position / rotation / direction doit être passée de la logique au thread d'interface utilisateur. Vous pourriez également avoir besoin d'une sorte d'ID de corrélation pour déterminer à quel objet de jeu ces données appartiennent.
La façon dont vous le faites dépend de la langue avec laquelle vous travaillez. Dans Scala, vous pouvez utiliser la mémoire transactionnelle logicielle, en Java / C ++ une sorte de verrouillage / synchronisation. J'aime les données immuables, j'ai donc tendance à retourner un nouvel objet immuable pour chaque mise à jour. C'est un peu de gaspillage de mémoire, mais avec les ordinateurs modernes, ce n'est pas si grave. Néanmoins, si vous souhaitez verrouiller des structures de données partagées, vous pouvez le faire. Consultez la classe Exchanger en Java, l'utilisation de deux tampons ou plus peut accélérer les choses.
Avant de partager des données entre des threads, déterminez la quantité de données que vous devez réellement transmettre. Si vous avez un octree partitionnant votre espace 3D et que vous pouvez voir 5 objets de jeu sur 10 objets au total, même si votre logique doit mettre à jour les 10, vous devez redessiner uniquement les 5 que vous voyez. Pour plus de lecture, consultez ce blog:
http://gameprogrammingpatterns.com/game-loop.html
Il ne s'agit pas de synchronisation, mais il montre comment la logique du jeu est séparée de l'affichage et quels défis vous devez surmonter (FPS). J'espère que cela t'aides,
marque