2014-05-03 7 views
3

Je suis en train de construire un jeu 2D simple basé sur des tuiles en JavaScript, et je veux savoir la meilleure façon de stocker des données cartographiques sur le client.Javascript: La meilleure façon de stocker des données cartographiques?

Sur le serveur, je stocke la carte en blocs de 64x64 et je demande les trois jeux suivants lorsque le joueur entre dans un quadrant de son bloc 64x64 actuel. Pour cette raison, je vais certainement besoin de diviser le morceau en un quadtree, où chaque nœud est 1/4 de la carte.

Je veux savoir comment stocker chaque quadrant dans le quadtree. Ma plus grande préoccupation est de savoir à quelle vitesse je peux analyser les données. Quand je demande un nouveau morceau 64x64 de la carte, je dois l'avoir prêt à partir avant que le joueur puisse le voir. Si je stocke les données cartographiques sous la forme d'un tableau à deux dimensions, il faudrait du temps O (N^2) pour le stocker, ce dont je ne suis pas satisfait, surtout parce que je ferais 3x 4096 tuiles. Serait-il possible de descendre à O (nlogn)?

Si cela aide, j'ai une démo simple du monde du jeu. Actuellement, il copie juste un morceau 64x64 dans un tableau 2D. https://rawgit.com/Meredithrs/HTML5-Canvas/master/game-window-demo/index.html

Répondre

1

Selon ma compréhension

d'optimisation Première

Vous pourriez essayer de stocker l'emplacement de mouvement autorisé dans un tableau de dimension unique seulement pour la tuile principale au lieu de stocker la position de toutes les tuiles. Cela réduirait considérablement le stockage de données.

Une autre optimisation

Vous pouvez également partager votre point de vue en quatre quarts de cercle. (Comme diviser pour régner)

Exemples si la dimension totale est [400400]

scinder comme

  - [0,0] - [ 200,200] 
     - [200,0] - [400, 200] 
     - [0, 200] - [200, 400] 
     - [200,200] - [400, 400] 

ensuite créer quatre matrice de dimension unique avec des coordonnées de position autorisée [x, y] sous chaque quadrant.

Maintenant, en fonction de l'emplacement des tuiles, choisissez quel réseau de quadrants. Puis parcourez-le pour voir si cela est permis ou non.

L'optimisation peut se faire encore plus .. Bonne chance avec votre projet :)

+0

Je ne vais pas le stockage d'une primitive dans le tableau de la carte, donc je devrais pouvoir faire map.get (x, y) .isWalkable(), qui ne nécessiterait pas d'itération, en fonction de la structure de données que j'utilise. Je suis plus préoccupé par le transfert des données d'une chaîne à une structure de données aussi rapidement que possible. – Meredith

Questions connexes