Как мне нужно, чтобы мои игровые сущности знали о вещах вокруг них? - PullRequest
1 голос
/ 12 июля 2009

Каждый тип врага в моей игре - это отдельный класс, и экземпляры хранятся в массиве C. В основной игре цикл update () запускается для каждого экземпляра противника / предмета, а draw () запускается. Некоторые из команд update () требуют знания того, где находится основной игрок. Каков наилучший способ передачи этой информации в экземпляр? Я не думаю, что глобальные переменные - это разумный способ сделать это, поскольку многопользовательские опции могут быть добавлены позже.

Это всего лишь пример более серьезной проблемы, которая заключается в том, как вещи в игре должны знать друг о друге. Откуда враги узнают, например, что они сталкиваются с другими врагами?

Ответы [ 4 ]

3 голосов
/ 12 июля 2009

Один из способов сделать поиск немного более эффективным - это разделить обновляемые сущности на четыре дерева. Дерево будет разделено в зависимости от местоположения на экране или в игровом мире, который вы настроили. Таким образом, вы можете настроить его так, чтобы обновлялись только близлежащие объекты. Так, например, если вы делаете обнаружение попаданий, вы можете полностью игнорировать большие группы.

четверные деревья

надеюсь, что поможет

3 голосов
/ 12 июля 2009

Вам необходимо построить многоразветвленную древовидную структуру (а не простое двоичное дерево). Узлы - это локации в игре. Каждый узел может содержать несколько простых указателей структур / объектов (в зависимости от вашего языка программирования). Когда игрок перемещается по игре, вы перемещаете указатель позиции своего игрока на узел дерева, представляющий местоположение. Когда вы запускаете игру, эта структура типа дерева заполнена вещами, которые нужно подобрать, монстрами и т. Д. Случайное семя также можно использовать для рассеивания монстров.

Это помогает повысить скорость игры, поскольку вам нужно только искать текущий узел и узлы на расстоянии одного шага от вашего текущего местоположения / узла. Любые подпрограммы, вызывающие продвижение или отступление монстров, просто перемещают указатель монстров к следующему узлу или узлам. Если используется медпакет, его указатель уничтожается из комнаты / узла, в котором он находится.

Удачи

0 голосов
/ 12 июля 2009

Все объекты в игре, включая игрока, должны находиться в одном контейнере. Ваш ИИ будет проходить через них каждый кадр и вызывать некоторую функцию, которая выполняет все цели каждой сущности.

Объекты (например, игрок) имеют доступ ко всем другим объектам через тот же контейнер.

Однако вам потребуется умный подход к контейнеру, чтобы сделать доступ сущности к контейнеру эффективным.

0 голосов
/ 12 июля 2009

Объект контроллера?

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

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