Acerca de
Estas son en realidad dos preguntas en una. En primer lugar, estoy buscando una manera de almacenar eficientemente grandes cantidades de datos de mosaico. El otro aspecto trata de consultar el conjunto de datos y mostrar mosaicos. Déjame darte algunos antecedentes primero.
Estamos haciendo un juego de magnate multijugador basado en navegador usando la biblioteca CraftyJS para representarlo en Canvas. En el fondo de la GUI, estamos ejecutando Yii Framework en PHP y todo se conecta a un generador de mapas aleatorios de Python y un motor de juegos.
Así es como se ve el primer renderizado del mapa aproximado: http://i.imgur.com/khAXtl.png
Almacenar los datos del mapa
El mundo del juego se genera aleatoriamente cada vez que comienza el juego. El tamaño es de 100x100 fichas hexagonales para cada jugador. Eso significa que para un juego de tres jugadores, se crean 90,000 fichas. Actualmente solo creo una matriz de JavaScript desde la que renderizo el mapa.
Esto funciona bien para renderizar, pero para cualquier tipo de interacción con el mapa necesitamos almacenar qué jugador posee el mosaico, qué tipo de estructura se construye encima, cuál es su precio actual, etc. Al principio, al menos para el prototipo, queríamos usar MySQL, pero después de algunas pruebas, no es exactamente tan rápido como me gustaría. Quizás un almacén de objetos como MongoDB sería más adecuado para almacenar datos de mosaico en lugar de una tabla SQL. O tal vez algo más?
Mostrar el mapa
Otro problema que veo es moverse por el mapa. Actualmente estoy creando entidades Crafty para cada mosaico, incluso si no está en la ventana gráfica. Esto es lento, porque a pesar de que Crafty representa solo los que están en la ventana gráfica, almacena y posiblemente repite todos los mosaicos en cada evento de representación. Lo que tengo actualmente es un mapa generado generado que es muy lento para cargar y tartamudea cuando te mueves, ahora me gustaría hacerlo jugable.
Mi primera idea fue cargar el subconjunto de mosaicos que se muestran en la ventana gráfica. Pero cuando un jugador mueve la ventana gráfica a un área en blanco, necesito consultar el servidor y esperar la respuesta, solo entonces se puede representar el mapa. Esto estaría bien en una aplicación nativa, pero es lenta en un juego web.
La forma de obtener un rendimiento uniforme del mapa podría ser precargar un subconjunto más grande de mosaicos en una matriz de JavaScript y usarlo como caché. El jugador tendría algunas pantallas "en caché" y cuando mueva la ventana gráfica, cargaría más fichas en el "caché" de JS.
¿Me dirijo en la dirección correcta? Me encantaría obtener más información de alguien que haya hecho algo similar. Soy nuevo en el desarrollo de juegos, pero he pasado por muchas fuentes en las últimas semanas.