# Applications > Dveloppement 2D, 3D et Jeux > Moteurs de jeux vido >  mon moteur : discussion sur la gestion et la manipulation des donnes

## begre1929

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 lment 3D, il gre donc le clavier/souris (OIS) et l'affichage 3D (Ogre3D). Point que je tiens  prciser maintenant mais utile pour la suite, il utilise (actuellement) une seule scne.

De l'autre j'ai commenc un proto-serveur, pour l'instant il lit des donnes enregistres dans une base sql. Je suis prsentement entrain d'tudier la programmation rseau 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 donnes prsentes sur le serveur doivent tre  envoyer. 

Prenons la position 3D de l'ensemble des entits. 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 dcouvert l'octree, structure qui semble la plus intressante pour tout objet statique, si j'ai bien compris, car bouger un objet au sein de l'octree demande des calculs pour gnrer un nouvel octree.
Je me suis dit ok, bon pour dfinir les emplacement des cailloux...

maintenant les objets qui se dplacent (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 dfinis par un espace autour de lui servant  dtecter les autre entits. Je me suis dit ok, sur mon serveur je vais utiliser ogre (sans faire de rendu) pour crer un octree qui contiendra mes cailloux. Pour ce qui est des auras je pense  faire de la dtection de collisions dans un scenegraph. Mais o est en dfinitif 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 anims, 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 mmoire avec la position d'un caillou, ou d'une chvre qui sont dans une zone sans joueur, donc la base de donne SQL est parfaite pour a. mais l o il y a du monde, dois-je tout mettre en mmoire 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 entits : actuellement je pencherais pour avoir un octree d'index unique de chaque objet statique, et qui au besoin, chercher avec le numro unique les informations dans la base. Pour les objets anims, faire un mga scenegraph qui contient donc un index, la position, mais aussi ventuellement l'orientation. En dfinitif, 

 en temps rel, la base SQL doit-elle uniquement tre utilise pour ce qui n'est pas en rapport avec la 3D ? 

ou dit autrement :

 la base SQL, en temps rel et except l'index, sert-elle qu' stocker des variables non lies  la 3D ? 

edit :: en fait, je me suis dis que j'allais utiliser deux bases, l'une en temps rels (mj lors de chaque cycle) et l'autre de sauvegardes cette dernire 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 donnes 3D des objets qui ont une forte probabilit d'tre manipuls.

 ::aie::

----------


## Happy

Salut !

Alors, une seule base de donne 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 caractristiques 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 donnes, lorsque le serveur reoit une position d'un joueur, il devra faire une requte pour tester les autres positions autour de lui dans un rayon de x units dfinies par toi. Par exemple, une pseudo requete en mysql :


```
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 affiche dans son jeu  travers des graphismes.

Ce sera  toi d'optimiser ces requtes de sorte  en avoir le moins possible.

Les mobs qui ne sont entours d'aucun joueur ne seront tout simplement pas touchs. Ils resteront dans la table mobs tout simplement.

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

----------

