JeuWeb - Crée ton jeu par navigateur
Gestion déplacement entité - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Gestion déplacement entité (/showthread.php?tid=6333)

Pages : 1 2


Gestion déplacement entité - Auronake - 20-08-2012

Bonjour !

Voilà, j'expose la problématique : nous souhaiterions (avec HiJack) réaliser un jeu en temps réel (sorte de Hack'n slash 2d) et nous nous posons la question sur la gestion des déplacements des entités (en l’occurrence des zombies...) dans un monde persistant.

On voudrait que nos chers zombies bougent même quand aucun joueur ne se trouve à proximité (personne ne les voit).

Nous avons pensez à deux choses complémentaires :
- Quand on se trouve dans la "zone" d'un joueur (zone affichée et un peu plus), alors on calcul les déplacements des zombies par rapport au joueur (et cela au "pixel près").

- Quand les zombies sont seuls (pas de joueur aux alentours) alors on passerai la main à un thread qui mettrait à jour les positions des zombies (sans trop se presser non plus et pas au pixel près mais plutôt par rapport aux cases (tiles) de la map).
Dans ce cas là, on aurait en système d'influence qui "dirait" aux zombies vers où aller implicitement (mais ça ce n'est pas intéressant dans l'exemple Smile).


Quand pensez-vous ? Avez-vous une meilleure idée pour gérer la persistance du monde par rapport au déplacement des entités du jeu visible et non visible ?


RE: Gestion déplacement entité - niahoo - 20-08-2012

Ben moi je dirais qu'il faut toujours garder la position de tes zombies indépendante de celle des joueurs. Ça simplifiera puisque tu n'auras que ce cas à gérer. Et tu fais entrer la proximité de joueurs dans ton système d'influence.

Comme ça tu gères tous tes zombies de la même manière et tu peux le faire avec des coordonnées X;Y, comme ça que tu le veuilles en pixels ou savoir sur quelle case de ta map il se trouve, ça doit se calculer rapidement.


RE: Gestion déplacement entité - Hijack - 20-08-2012

Je verrais plutôt cela comme une gestion par groupe et gestion individuelle...

J'ai peur que calculer la position individuelle de chaque zombies soit trop lourd pour le serveur... On aurait facilement plusieurs millier de zombies en jeu, donc plusieurs millier de calcul de positions prenant en compte l'influence de la map...

Au final, le joueur ne verrait pas la position des zombies qui ne sont pas dans son environnement proches.
Il pourrait y avoir un thread de calcul par groupe : si pas de survivants dans les parages, on déplace l'entité de X zombie vers cette case.
Et un thread de calcul individuel : si un survivant est dans la zone, chaque zombie est une entité à part entière, et on gère indépendamment ces entités lors du déplacement.

Tous les calculs prenants en compte l'influence de la map et l'influence dégagé par un joueur.


RE: Gestion déplacement entité - Shidame - 20-08-2012

Qu'appelez vous influence de la map et influence dégagé par un joueur exactement ?

Ne peut on pas considérer un joueur comme faisant partie de la map et du coup ne calculer les dépacements qu'en une seule fois ? ce qui reviens à ce que disait niahoo trés justement.


RE: Gestion déplacement entité - Auronake - 20-08-2012

(20-08-2012, 02:12 PM)Shidame a écrit : Qu'appelez vous influence de la map et influence dégagé par un joueur exactement ?

L'influence sera un paramètre qui augmentera et diminuera dans le temps. L'influence d'une "case" augmentera s'il y a des combats ou d'autres évènements (voiture en feu, déplacement de joueur, etc) et attirera les zombies de plus ou moins loin.
Dans l'ancien système au tour par tour, cela fonctionnait bien. Il va falloir revoir ça pour le temps réel mais dans le principe se sera quelque chose dans le genre.

(20-08-2012, 02:12 PM)Shidame a écrit : Ne peut on pas considérer un joueur comme faisant partie de la map et du coup ne calculer les dépacements qu'en une seule fois ? ce qui reviens à ce que disait niahoo trés justement.

Ce qu'on voudrait c'est avoir une map persistante avec tous les zombies de la map qui bouge tout le temps.
Calculer tous les déplacements de tous les zombies et de tous les joueurs à chaque fois (chaque frame) va devenir extrêmement long...

On pencherai par un système où on considèrerai les zombies comme des groupes de zombies hors zone de joueur et quand un joueur s'approche d'un groupe (caractérisé par un nombre genre 10 pour un groupe de 10 zombies), alors on "instancierai" chaque zombie du groupe individuellement.
Quand le joueur s'en éloigne, on recréerai le groupe composé des zombies de même zone.

Au lieu de gérer chaque zombie individuellement tout le temps, on gérerai soit des groupes (loin des joueurs) soit des individus (proche du joueur).

Les zones seraient des regroupement de cases de la map...

Ché pas si c'est clair Smile et si c'est bien !?


RE: Gestion déplacement entité - Hijack - 20-08-2012

(20-08-2012, 02:23 PM)Auronake a écrit :
(20-08-2012, 02:12 PM)Shidame a écrit : Qu'appelez vous influence de la map et influence dégagé par un joueur exactement ?

L'influence sera un paramètre qui augmentera et diminuera dans le temps. L'influence d'une "case" augmentera s'il y a des combats ou d'autres évènements (voiture en feu, déplacement de joueur, etc) et attirera les zombies de plus ou moins loin.
Dans l'ancien système au tour par tour, cela fonctionnait bien. Il va falloir revoir ça pour le temps réel mais dans le principe se sera quelque chose dans le genre.

Je rajouterais même que ce que l'on appelle l'influence du joueur n'est pas différente de l'influence d'un autre évènement (le joueur et la voiture qui brûle sont tous deux des entités). La présence d'un joueur ou d'un évènement sur une case va simplement augmenter de n points l'influence naturelle de la case (soit la probabilité qu'une entité zombie se dirige vers elle.).


RE: Gestion déplacement entité - srm - 20-08-2012

Je ne gérait pas les zombies hors map et prévoirait plutôt un système qui les créé à la volé sous certaines conditions pour qu'il rentre dans la zone visible par le(s) joueur(s)


RE: Gestion déplacement entité - Hijack - 20-08-2012

(20-08-2012, 02:40 PM)oxman a écrit : Je ne gérait pas les zombies hors map et prévoirait plutôt un système qui les créé à la volé sous certaines conditions pour qu'il rentre dans la zone visible par le(s) joueur(s)

Ce système simplifie les choses, mais ce qui nous pose problème c'est que si nous ne gérons pas les zombies hors zone, si nous ne gérons pas d'influence, il suffirait de sortir puis de réentrer dans la zone pour se sortir d'une situation délicate.
De plus on perdrait cet effet de horde de zonzons qui se déplacent sur la carte.


RE: Gestion déplacement entité - srm - 20-08-2012

Je ne t'ai pas dit de ne pas gérer l'influence.
Et si quelqu'un sort et rerentre dans la zone, il suffit de coder une sécurité contre ça, qui garde par exemple la même influence sur la zone durant 10mn après le départ de la zone.

Tu ne perds pas l'effet de horde de zonzon qui se déplacent sur la carte.
A tes yeux oui car tu vois l'envers du décors, mais aux yeux du joueur il ne saura pas que c'est pas le cas.


RE: Gestion déplacement entité - Auronake - 20-08-2012

(20-08-2012, 02:45 PM)Hijack a écrit :
(20-08-2012, 02:40 PM)oxman a écrit : Je ne gérait pas les zombies hors map et prévoirait plutôt un système qui les créé à la volé sous certaines conditions pour qu'il rentre dans la zone visible par le(s) joueur(s)

Ce système simplifie les choses, mais ce qui nous pose problème c'est que si nous ne gérons pas les zombies hors zone, si nous ne gérons pas d'influence, il suffirait de sortir puis de réentrer dans la zone pour se sortir d'une situation délicate.
De plus on perdrait cet effet de horde de zonzons qui se déplacent sur la carte.

Oui, on tient (pour le moment) à cet persistance et à cette influence pour pouvoir "donner" vie à ces zombies dans le sens où des actions sur la map vont influencer leur mouvement (piège, leurre, assaut, ...).

Le truc est de trouver une solution pour optimiser la chose...

Idée : nous ce que l'on souhaite, ce dont on a envie, c'est que les zombies "suivent" les évènements de la carte (l'influence).

Ne peut-on pas faire en sorte de générer à la volée des zombies sur les nouvelles cases (là où se dirige le joueur et aux alentours) en fonction de l'influence de ces cases ?

- Une case hautement influencée aura beaucoup de zombies
- Une case inverse aura l'inverse
- Intégrer une part aléatoire de génération (comportement contraire aux règles du dessus)

Défaut : être poursuivi par une "horde", s'enfuir puis revenir et n'avoir plus de hordes à nos trousses (mais potentiellement d'autres zombies ailleurs et pas loin).

?