Mode de déplacement des joueurs sur la démo

Mode de déplacement des joueurs sur la démo

by Lionel Isoz -
Number of replies: 1

Bonsoir,


Voulant utiliser la version démo pour comparer les déplacements de mes joueurs, j'ai remarqué quelques différences de position dues aux marges de sécurité. Par exemple si deux joueurs se déplacent sur la direction horizontale et entre en contact, suivant l'ordre de définition des joueurs dans le fichier lu en entrée, les positions des deux joueurs varient.

(nbCell = 10 =>   rayonJoueur = 20  margeJeu = 0.3125 )

50 0 4 0 #Player1          devient à l'instant du contact      20            0 4 6 #Player1

-50 0 4 0 #Player2                                                                  -20.3125  0 4 6 #Player2

Alors que si on déclare :

-50 0 4 0 #Player1          devient à l'instant du contact      -20            0 4 6 #Player1

50 0 4 0 #Player2                                                                     20.3125  0 4 6 #Player2

Par conséquent, nous remarquons que la marge de sécurité ne s'équilibre pas isométriquement ou équitablement, ce qui donnerait dans ce cas, les centres des joueurs à -20.15625 et l'autre à 20.15625, ce qui serait indépendant de l'ordre de déclaration des joueurs. Or ici la marge se fixe suivant l'ordre des joueurs du fichier d'entrée (le premier arrivé).

Le problème est que ce phénomène s'amplifie fortement lorsque le nombre de joueurs augmentent, ce qui conduit la simulation à des tournures complètement différentes suivant les ordres, comme le montre cette illustration :



Visualisation du Test1 :


Visualisation du Test1 avec une modification de l'ordre des joueurs :


Ainsi, ma question est quelle méthode doit-on suivre ? Une simulation où l'ordre de lecture des joueurs jouent un grand rôle ?

Ou une méthode où les déplacements des joueurs se font isométriquement, c'est-à-dire une simulation indépendante de l'ordre de lecture ?


Merci d'avance pour votre réponse 

Lionel Isoz


PS : les tests ont été effectués avec la version démo sur VMware Horizon.

In reply to Lionel Isoz

Re: Mode de déplacement des joueurs sur la démo / section 3.1 et 3.3.2

by Ronan Boulic -

Merci pour votre analyse très documentée.

Réponse courte: non, on ne résout pas les collisions de manière simultanée (ou isométrique comme vous l'écrivez) parce que ça compliquerait trop la résolution des collisions justement.

Réponse longue:

La section 3.1 décompose la mise à jour de la simulation en plusieurs étapes pendant lesquelles on veut s'assurer d'une cohérence minimale. Par exemple la première étape concerne seulement le déplacement de tous les joueurs:

Analyse de la situation relative entre chaque joueur pour déterminer sa cible puis pour définir sa direction de déplacement et déplacer tous les joueurs qui le peuvent vers leur cible. Traitement d’éventuels contacts joueur-joueur

Mais comme écrit plus haut, cela compliquerait le programme de résoudre une mise à jour simultanée ; il suffit d'imaginer plusieurs joueurs qui entrent en collisions pendant la mise à jour... C'est pourquoi la section 3.1 renvoie à la section 3.3 et plus particulièrement à 3.3.2 pour décrire un mécanisme de traitement de collision "asynchrone" où, comme vous l'avez remarqué, l'ordre des joueurs à une importance puisque le résultat est légèrement différent du fait de cet ordre. Nous assumons cette simplification pour que vous perdiez moins de temps dans cette résolution. la méthode décrite en 3.3.2 est très simple à mettre en oeuvre. La revoici:

On procédera comme suit : la possible future position d’un élément mobile est calculée pour DELTA_T et testée vis-à-vis d’éventuelles collisions avec la marge MJ. En cas de collision, la future position n’est pas validée ; l’élément ne bouge pas mais son état peut changer du fait de la détection de collision