JeuWeb - Crée ton jeu par navigateur
Déplacements dans un jeu type RPG - 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éplacements dans un jeu type RPG (/showthread.php?tid=7637)



Déplacements dans un jeu type RPG - didawin - 01-05-2016

Bonjour à tous,

J'ouvre ce topic afin d'échanger sur les méthodes possible pour déplacer un personnage.
J'ai pour projet de faire un RPG avec vue du dessus. (style rpgmaker)
J'ai une solution mais je sait que c'est pas optimisée du tout, et j'aimerais donc savoir s'il n'existe pas d'autre solution plus récente.
Je n'ai pas vu de topic la dessus c'est pourquoi j'ouvre celui ci..

Ce que je compte faire, c'est créer une table SQL qui contiendrais l'ID du joueur, sa position (en coordonnées X,Y), date de dernière update.
Ensuite en PHP, je récupère la position inscrite dans la table, j'affiche la carte centrée sur sa position, et bouge le joueur avec du javascript.
A chaque fois que le joueur bouge (un pas à gauche/droite/haut/bas) j'update sa position et la date dans la table sql.

Maintenant je me rend compte que si 100 joueurs font 1 pas, ça fait donc 200 requêtes ... Je ne pense pas que ce soit la façon la plus optimisé de faire et demande donc votre avis sur comment je pourrais gérer ces déplacements ? Si des personnes utilisent ce genre de déplacement, comment est ce gérer aujourd'hui ?

D'avance merci.


RE: Déplacements dans un jeu type RPG - Akira777 - 01-05-2016

Yo!

Pour ma part j'ai jamais fait ça autrement qu'avec Node.js + Socket.io.
Quand le joueur déco, j'envois ça dernière position en base.
Là ça te fait deux requêtes SQL pour toute la session de déplacement d'un joueur.

Après si c'est du multi (plusieurs joueurs qui se voient sur une carte), bah socket.io entre vraiment en jeu, et à chaque déplacement d'un joueur tu broadcasts les coordonnées du déplacement aux autres joueurs.


RE: Déplacements dans un jeu type RPG - Thêta Tau Tau - 01-05-2016

Il faudrait plus de précisions. Déjà, est ce qu'on parle d'un jeu où on a un système de points d'actions et où les joueurs ne se déplacent que de quelques cases (ou de quelques dizaines de cases) par jour, ou bien d'un truc style mmorpg en temps réel, où on se déplace de plusieurs cases par secondes?

Si on est dans le premier cas, ta solution marche parfaitement, même si on pourrais sans doute optimiser en permettant au joueur de se déplacer de plus d'une case à la fois.

Dans le deuxième cas c'est nettement plus compliqué, surtout si on veut que les joueurs puissent se voir entre eux en temps réél, et PHP n'est pas vraiment le langage le plus adapté pour ça, node fait beaucoup mieux le boulot. D'ailleurs même dans le premier cas node + socket.io fait totalement l'affaire (c'est ce que j'utilise pour mon jeu, avec le framework meteor.js lui même basé sur node+socket.io)


RE: Déplacements dans un jeu type RPG - didawin - 01-05-2016

Effectivement j'ai manqué de précision,
Il s'agit du 1er cas, ou chaque joueur seras limiter par un nombre de points d'action.

Par contre je ne connais pas du tout NodeJS, auriez-vous des bons tutoriel/exemples?
Aussi, je vais regarder ce que je trouve sur le framework meteor dont tu parle afin de voir comment le mettre en place.


RE: Déplacements dans un jeu type RPG - Argorate - 08-05-2016

(01-05-2016, 07:06 PM)Akira777 a écrit : Après si c'est du multi (plusieurs joueurs qui se voient sur une carte), bah socket.io entre vraiment en jeu, et à chaque déplacement d'un joueur tu broadcasts les coordonnées du déplacement aux autres joueurs.

Ca ne suffit pas ça. Tout doit passer par le serveur pour vérifier que chaque déplacement est autorisé (en fonction des points de mouvement si y en a, où tout simplement des cases qui sont accessible ou non, tu ne peux pas te contenter des vérifications JS)...

C'est donc assez lourd. Après si ton serveur c'est qu'un nodeJS, ça simplifie, car il fait pusher ET server, donc il peut vérifier avant de push.