Redis, как представить 2D-мир (MMO?) - PullRequest
1 голос
/ 16 января 2012

Я делаю MMO, у которого будет 2d мир. (Это учебный проект, поэтому не пытайтесь отговорить меня от него :) Я хотел бы поэкспериментировать с новым хранилищем данных для него, и я прочитал много хорошего о Redis. Я прошел уроки, и я думаю, что начинаю понимать силу Redis, но не ясно, как я мог бы моделировать такой мир.

Вот некоторые требования к дизайну

  1. Мне нужно иметь возможность отправить текущее положение элементов в мире. Было бы приемлемо разделить их на географические «комнаты» для исполнения.
  2. Мне нужно уметь «перемещать» объект в мире, меняя его положение
  3. Мне нужно получить информацию об объекте: какое у него имя, тип, атрибуты и т. Д.
  4. Мне нужно уметь рассчитывать базовые столкновения (объект хочет двигаться вправо, там есть камень?)

Как бы вы смоделировали это в Redis? Redis - неуместный выбор?

Ответы [ 2 ]

2 голосов
/ 16 января 2012

Если предположить, что 2D-мир разделен на квадраты известных координат, вам, вероятно, лучше всего использовать redis для создания ключей на основе координат, которые возвращают наборы идентификаторов объектов (или выходов / путей, или местности, и т. Д.)

например, очень простая иллюстрация

obj:1:name = Rock
obj:1:passable = false
obj:2:name = Skeleton
obj:2:passable = true
loc:0:0:objs = {1,2} // loc:0:0 contains obj:1 and obj:2
loc:0:0:paths = {0:1, 1:0, 1:1} // three legal paths, to loc:0:1, loc:1:0, loc:1:1

Мне не хватает эксперта по Redis, чтобы знать, не вызовет ли этот домен проблемы с Redis, поэтому примите мой совет с небольшим количеством соли.

1 голос
/ 16 января 2012

Redis - это хранилище значений ключей, и оно, вероятно, не очень хорошо подходит для этой задачи из коробки, но если бы я попытался это сделать, я бы, вероятно, прочитал о R-деревьях (или другом пространственно).ориентированной структуры данных), а затем сопоставить такую ​​структуру данных с шаблоном хранения значения ключа.Например, вы можете установить свой мир MMO как R-дерево в Redis, сделав каждый узел в дереве соответствующим определенному ключу в Redis, который затем будет содержать ограничивающий прямоугольник (и / или другойлист данных) и список ключей, указывающих на каждый из дочерних узлов.

Это, по крайней мере, позволит вам ограничивать размеры значений (свойство не обязательно совместно используется в плоском, равномерном представлении сетки), исохраняйте количество поисков Redis, необходимое для любой операции, в порядке log (n).

Веселитесь!Звучит как забавный способ учиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...