JeuWeb - Crée ton jeu par navigateur
Déplacement d'un personnage à la souris - 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 : Déplacement d'un personnage à la souris (/showthread.php?tid=5313)

Pages : 1 2


RE: Déplacement d'un personnage à la souris - Argorate - 22-03-2011

La taille de la map n'a strictement aucune incidence, c'est la profondeur du chemin à parcourir qui importe.
Pour mon BTS j'avais crée un jeu qui utilisé ce système de calcule de zone de déplacement potentiel.
J'étais allé jusqu'à une dizaine de cases environ, si je me souviens bien. Ça ramait un peu (entre 1 et 2 seconde pour le JS) mais c'était sur un pc de l'école totalement naz, sinon ça marchait nikel chez moi...

Pour l'algo, c'est toi qui vois. Moi j'avais réinventé dijktra à l'époque (ne connaissais pas l'algo de ce dernier). Sur le principe c'est pas très compliqué si on a un niveau en logique algorithmique correct.

Le plus chian est d'avoir à le faire à la fois en JS (coté interface) et à la fois en PHP (coté serveur pour vérifier qu'il n'y est pas de cheat).
Mais bon passer de l'un a l'autre n'est pas très complexe non plus.


RE: Déplacement d'un personnage à la souris - php_addict - 22-03-2011

(22-03-2011, 08:42 PM)Argorate a écrit : La taille de la map n'a strictement aucune incidence, c'est la profondeur du chemin à parcourir qui importe.

si, plus ta map est grande plus le chemin risque d'etre long et compliqué...


RE: Déplacement d'un personnage à la souris - Holy - 22-03-2011

Si je puis me permettre une remarque. Etant confronté aux mêmes problèmes, j'envisage d'utiliser un système de cache des chemins vu que j'ai un environnement de carte qui n'évolue que très peu en cours de partie. Vous me direz, c'est super gourmand en place, mais ça peut être intéressant.

J'ai pas encore eu l'occasion de m'y intéresser de plus près, mais ça me semble une option intéressante.


RE: Déplacement d'un personnage à la souris - Argorate - 23-03-2011

(22-03-2011, 09:11 PM)php_addict a écrit :
(22-03-2011, 08:42 PM)Argorate a écrit : La taille de la map n'a strictement aucune incidence, c'est la profondeur du chemin à parcourir qui importe.

si, plus ta map est grande plus le chemin risque d'etre long et compliqué...

Tout dépend de quoi on parle, mais ici il s'agit de pouvoir déplacer son perso, donc en l'occurence, non ça n'a aucune incidence...

Si ton personnage à 5 points de mouvements, que t'as map fasse 10*10, 100*100 ou 1 000 000*1 000 000, le résultat sera strictement le même car l'algo s'appliquera au case alentour, et ici, à 5 cases dans le meilleure des cas.


RE: Déplacement d'un personnage à la souris - Ter Rowan - 23-03-2011

sans rentrer dans la notion de choix d'algo (A*, ...) je pense que le plus efficace est de codé la recherche du chemin côté client (via javascript) et d'envoyer au serveur les différentes étapes

le serveur n'a pas besoin de calculer le plus court chemin, il suffit qu'il vérifie que le personnage puisse se déplacer conformément aux étapes (au pire il s'arrête en court de route, s'il n'a plus d'énergie, point de mouvement, etc..)


après tout la gruge n'est pas de trouver le plus court chemin, mais d'aller plus loin que ce qui est possible

j'y vois deux avantages :

1) pas de charge serveur de recherche de chemin, que la vérification des étapes ==> beaucoup moins de calcul côté serveur

2) même programme côté serveur si une autre fonctionnalité de déplacement est offerte au joueur : genre "passer par des points choisis par le joueur" (et non calculé par la machine)


vous ne croyez pas ?


RE: Déplacement d'un personnage à la souris - Argorate - 23-03-2011

C'est une belle idée, mais ça ne marche pas ça, ou du moins je ne vois pas comment là... (enfin ça dépend les règles du jeu tu me diras... ^^)

Tu définis des étapes dis-tu? et comment vérifies-tu s'il peux ou non se déplacer entre deux étapes?
Tu dis que s'il n'a plus de mouvement il s'arrête, admettons, mais comment tu sais quand il n'a plus de mouvement si tu calcules pas le chemin le plus cours possible justement?


RE: Déplacement d'un personnage à la souris - Ter Rowan - 23-03-2011

(23-03-2011, 03:49 PM)Argorate a écrit : C'est une belle idée, mais ça ne marche pas ça, ou du moins je ne vois pas comment là... (enfin ça dépend les règles du jeu tu me diras... ^^)

Tu définis des étapes dis-tu? et comment vérifies-tu s'il peux ou non se déplacer entre deux étapes?
Tu dis que s'il n'a plus de mouvement il s'arrête, admettons, mais comment tu sais quand il n'a plus de mouvement si tu calcules pas le chemin le plus cours possible justement?

ce que je dis c'est que le serveur doit contrôler la capacité du personnage à se déplacer entre deux étapes

pas à calculer le chemin optimal :

exemple

le joueur veut aller de A vers F
le javascript dit que A* = A B C D E F
ajax envoie a php : perso va en B puis en C puis en D puis en E puis en F
php vérifie que A (position du perso) vers B est possible si oui, perso en B
etc
jusqu'à perso en F

maintenant si ajax (via triche) donne B F (bouh le tricheur)
php vérifie que A (position du perso) vers B est possible, oui => le perso est en B
php vérifie que B (position du perso vers F est possible, non => le perso reste en B

autre exemple si ajax (via autre que A*) donne B C H I J F (autre chemin, pas optimisé mais choisi par le joueur)
php vérifie que A (position du perso) vers B est possible, oui => le perso est en B
etc
jusqu'à perso en F

conclusion le serveur s'assure qu'il n'y a pas de triche mais ne calcule pas le A*
grosso modo j'évite au serveur de calculer tous les coûts des déplacements qui ne sont pas finalement retenu par l'algorithme du A* (ou d'un autre)


RE: Déplacement d'un personnage à la souris - Argorate - 23-03-2011

Ah.... ^^

Oui, je n'avais pas du tout compris ça, en gros le traitement ne se fait plus que par JS et il l'envoi au php qui vérifie uniquement le cas particulier qui lui ait envoyé.

C'est une bonne idée je trouve, ça évite de faire en doublon l'algo de recherche et économise d'autant le traitement coté serveur!