Про
Це фактично два питання в одному. Перш за все, я шукаю спосіб ефективного зберігання великої кількості даних про плитку. Інший аспект стосується запиту набору даних та відображення плиток. Дозвольте спочатку дати вам декілька відомостей.
Ми створюємо багатокористувацьку гру-магнат на основі браузера, використовуючи бібліотеку CraftyJS, щоб повернути її на Canvas. На фоні GUI ми запускаємо Yii Framework на PHP, і все це підключається до генератора випадкових карт Python та ігрового двигуна.
Ось так виглядає перший грубе відображення карти: http://i.imgur.com/khAXtl.png
Зберігання даних карти
Світ ігор генерується випадковим чином щоразу, коли гра починається. Розмір - 100х100 шестикутних плиток для кожного гравця. Це означає, що для гри для трьох гравців створено 90 000 плиток. В даний час я просто створюю масив JavaScript, з якого я відтворюю карту.
Це добре працює для візуалізації, але для будь-якої взаємодії з картою нам потрібно зберігати, якому гравцеві належить плитка, яка структура будується поверх неї, яка поточна ціна тощо. Спочатку, принаймні для прототипу, ми хотіли використовувати MySQL, але після деяких тестувань це не так швидко, як хотілося б. Можливо, сховище об'єктів на зразок MongoDB краще підходить для зберігання даних плиток замість таблиці SQL. А може, щось інше?
Відображення карти
Ще одна проблема, яку я бачу, - це переміщення по карті. Наразі я створюю хитрі об’єкти для кожної плитки, навіть якщо її немає у вікні перегляду. Це повільно, оскільки, хоча Crafty відображає лише ті, які переглядаються у вікні перегляду, він зберігає та, можливо, повторює всі плитки для кожної події візуалізації. Наразі у мене є намальована генерована карта, яка дуже повільно завантажується і заїкається, коли ви рухаєтесь навколо, тепер я хотів би зробити її відтворюваною.
Моя перша ідея полягала в завантаженні відображеного набору плиток, які знаходяться у вікні перегляду. Але коли гравець перемістить вікно перегляду в порожню область, мені потрібно буде запитати сервер і чекати відповіді назад, лише тоді карта може бути винесена. Це було б чудово в домашньому додатку, але це дуже мляво у веб-грі.
Способом отримання плавної продуктивності на карті може бути попереднє завантаження більшого набору плиток у масив javascript та використання його як кешу. У гравця буде кілька екранів, "кешованих", і коли він пересуває вікно перегляду, я б завантажував більше плиток у "кеш" JS.
Я прямував у правильному напрямку? Я хотів би отримати більше інформації від того, хто зробив щось подібне. Я новачок у розробці ігор, але останні кілька тижнів переживаю безліч джерел.