IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Moteurs de jeux vidéo Discussion :

mon moteur : discussion sur la gestion et la manipulation des données


Sujet :

Moteurs de jeux vidéo

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2012
    Messages : 11
    Points : 13
    Points
    13
    Par défaut mon moteur : discussion sur la gestion et la manipulation des données
    Bonjour,
    mon moteur de jeu (il n'a pas de nom...) s'articule entre client/serveur
    j'ai commencé l'écriture d'un proto-client qui à ce stade me permet de faire bouger un élément 3D, il gère donc le clavier/souris (OIS) et l'affichage 3D (Ogre3D). Point que je tiens à préciser maintenant mais utile pour la suite, il utilise (actuellement) une seule scène.

    De l'autre j'ai commencé un proto-serveur, pour l'instant il lit des données enregistrées dans une base sql. Je suis présentement entrain d'étudier la programmation réseau avec ASIO.

    donc ça c'était pour le point topo concernant la ligne de front.

    maintenant avec ASIO je me pose également les questions de la masse d'informations utiles à envoyer et surtout comment évaluer qu'elle partie de l'ensemble des données présentes sur le serveur doivent être à envoyer.

    Prenons la position 3D de l'ensemble des entités. Les objets qui sont hors du champs de vue + un delta (en terme de distance, je ne parle pas de l'orientation) sont inutiles à envoyer. Je me suis donc demandé comment calculer la distance entre chaque objets, évidement un calcul bourrin est à exclure... j'ai d'abord découvert l'octree, structure qui semble la plus intéressante pour tout objet statique, si j'ai bien compris, car bouger un objet au sein de l'octree demande des calculs pour générer un nouvel octree.
    Je me suis dit ok, bon pour définir les emplacement des cailloux...

    maintenant les objets qui se déplacent (on ne jette pas de caillou chez moi, donc n'essayez pas de m'avoir la dessus) j'ai lu dans un livre papier le concept d'aura, en gros chaque perso à ses sens qui sont définis par un espace autour de lui servant à détecter les autre entités. Je me suis dit ok, sur mon serveur je vais utiliser ogre (sans faire de rendu) pour créer un octree qui contiendra mes cailloux. Pour ce qui est des auras je pense à faire de la détection de collisions dans un scenegraph. Mais où est en définitif la question ?

    et bien elle s'en vient! parce que la question la voici :
    « si je commence à regarder ce que chaque aura touche dans le monde des animés, ça ne revient-il pas à calculer des distances entre chaque aura-entité ? et donc de faire ce que je voulais pas faire, i.e. faire un calcul brute de force ? »

    de plus, il me semble vital de ne pas charger la mémoire avec la position d'un caillou, ou d'une chèvre qui sont dans une zone sans joueur, donc la base de donnée SQL est parfaite pour ça. mais là où il y a du monde, dois-je tout mettre en mémoire puis une fois qu'il n'y a plus personne sauvegarder l'état dans la base sql ? parce que je suis pas sur de voir comment orchestrer une gestion de la base sql avec les entités : actuellement je pencherais pour avoir un octree d'index unique de chaque objet statique, et qui au besoin, chercher avec le numéro unique les informations dans la base. Pour les objets animés, faire un méga scenegraph qui contient donc un index, la position, mais aussi éventuellement l'orientation. En définitif,

    « en temps réel, la base SQL doit-elle uniquement être utilisée pour ce qui n'est pas en rapport avec la 3D ? »

    ou dit autrement :

    « la base SQL, en temps réel et excepté l'index, sert-elle qu'à stocker des variables non liées à la 3D ? »

    edit :: en fait, je me suis dis que j'allais utiliser deux bases, l'une en temps réels (màj lors de chaque cycle) et l'autre de sauvegardes cette dernière contiendra tout (incluant la position 3D par exemple de chaque entité) elle sera remplie qu'une fois toutes les X minutes pour faire un point de sauvegarde et ne pas surcharger le cpu à sauvegarder/lire les données 3D des objets qui ont une forte probabilité d'être manipulés.


  2. #2
    Membre éclairé
    Avatar de Happy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2005
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Autre

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2005
    Messages : 665
    Points : 875
    Points
    875
    Par défaut
    Salut !

    Alors, une seule base de donnée est suffisante. Maintenant il faut voir les choses comme suit :

    Une table joueurs et une table mobs (chevre, rat..) par exemple. Les deux contiennent la position x,y,z voir d'autres caractéristiques pour chaque joueur ou mob.

    Ensuite, chaque joueur enverra sa position au serveur, ensuite le serveur renvois au joueur tout ce qui l'entoure. C'est à dire les autres joueurs/mobs. En gros il renvoi une liste avec l'id et pos pour chaque joueur/mob.

    Dans la base de données, lorsque le serveur reçoit une position d'un joueur, il devra faire une requête pour tester les autres positions autour de lui dans un rayon de x unités définies par toi. Par exemple, une pseudo requete en mysql :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM joueurs WHERE pos_x > pos_joueur_x-5 AND pos_x <pos_joueur_x+5
    Ensuite renvoyer la liste au joueur qui sera affichée dans son jeu à travers des graphismes.

    Ce sera à toi d'optimiser ces requêtes de sorte à en avoir le moins possible.

    Les mobs qui ne sont entourés d'aucun joueur ne seront tout simplement pas touchés. Ils resteront dans la table mobs tout simplement.

    Tu peux aussi télécharger le code serveur privé de Lineage 2 (en java) et regarder comment ils font tous les aspects (coté sql et coté java/cpp).

Discussions similaires

  1. Réponses: 0
    Dernier message: 01/11/2013, 07h17
  2. Discussion sur la relation entre la théorie des jeux et la pratique
    Par info_sara dans le forum Développement 2D, 3D et Jeux
    Réponses: 8
    Dernier message: 17/10/2012, 09h53
  3. pour les débutants : discussion sur la gestion objet GTK
    Par chrtophe dans le forum GTK+ avec C & C++
    Réponses: 4
    Dernier message: 27/09/2011, 18h24
  4. Conseil sur la gestion d'une base de données
    Par GaetLo dans le forum Migration
    Réponses: 1
    Dernier message: 22/04/2011, 08h40
  5. Réponses: 6
    Dernier message: 04/06/2010, 21h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo