Хранение информации о порождении для 2d платформера / скроллера - PullRequest
2 голосов
/ 16 августа 2010

Я ищу идею, как лучше хранить информацию о порождении для бокового скроллера. Игра, которую я пишу, очень похожа на Super Mario Bros. Я пытаюсь реализовать то, что когда вы проходите уровень, враги должны появляться в определенных местах. Я хочу хранить эту информацию на уровне, и я не хочу просто случайным образом вызывать врагов. Я ищу высокоуровневую стратегию для хранения и извлечения появившихся объектов, когда игрок достигает определенного места (например, Марио). Я не смог найти ни одного достойного учебника или предложения от Google.

Уровень основывается на тайле, поэтому карта - Tile [] []. Сейчас каждая плитка имеет размер 16x16 пикселей.

Единственное хорошее предложение, которое я видел до сих пор, - это хранить информацию о порождении в 2d массиве, где первое измерение - x, а второе - y, заданное в пространстве листов. Проблема, с которой я столкнулся в этой реализации, заключается в том, что, если у моего игрока, скажем, (160, 0), я хочу вызвать конкретного врага. Однако, если в следующий раз уровень будет сброшен, игрок находится на (160, 5), я хочу вызвать того же врага. Таким образом, чтобы эта реализация работала, я должен выполнить сканирование для заданной позиции y.

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

Есть ли в играх какие-то общие стратегии для этого?

1 Ответ

3 голосов
/ 16 августа 2010

Пока не слишком много точек появления, подойдет простой список.Каждая запись в списке имеет координаты XY и информацию о порождении.Просто переберите список, чтобы определить, находится ли игрок рядом с точкой появления.Это намного более эффективно для использования памяти, чем разреженно заполненный 2D-массив, очень прост в реализации и, вероятно, достаточно быстр.

Если это оказывается недостаточно быстрым, вам нужен некоторый пространственный индекс , kd-деревья довольно просты в реализации и обеспечивают хорошую производительность для поиска по близости.Другое решение состоит в использовании хеша, чувствительного к локальности, как описано в этой статье (PDF) .

...