Я понимаю основы указателей и ссылок, но самая большая проблема, которую я имею, заключается в том, чтобы решить, когда они должны использоваться (и какие). Основной пример, который я приведу, - одна из основных игр. Предположим, что установка что-то вроде:Классы указателей против ссылки
- новый Мир
- камеры
- Карта
World является указателем, потому что каждый раз, когда игра начинается новый сохранить или загружает существующий один, он удаляет мир и загружает новый. Но внутри Мира, только одно существование камеры и карты должно когда-либо существовать и только на протяжении всего Мира. Если мир разрушен, то, очевидно, они должны быть такими же. Однако .. позволяет сказать, что Map необходимо получить доступ к камере (но также и к другим объектам), должна ли камера передаваться по ссылке на карту или как указатель, или? Например, если его предполагается по ссылке, она должна быть:
map = Map(&camera);
(inside map class) Map(Camera camera) {...}
Или еще как:
map = Map(camera);
(inside map class) Map(Camera &camera) {...}
Кроме того, позволяет сказать, что карта имеет 2D вектор плитки под названием сетки. Что-то вроде:
std::vector< std::vector<Tile> > > grid;
Теперь давайте говорить у меня есть класс, который должен PathFinder, что сетка передается в Необходимо отредактировать плитки непосредственно изменить F, G, и т.д. значения (для первопрохождения).. Должен ли этот 2D-вектор быть нормальным двумерным вектором Tile's, а вся вещь передана ссылкой на PathFinder? Или это должен быть 2D-вектор указателей Tile?
Кроме того, у NPC и Player будет текущий ток, который является плиткой, в которой они сейчас находятся. Они должны иметь ссылку или указатель на эту плитку, чтобы они могли также установить себя в качестве водителя или пассажира на этой плитке через что-то вроде этого внутри классов NPC/игрока:
currentTile = tile;
currentTile->SetOccupant(this);
Другая проблема приходит, когда я тогда уничтожить эту сетку, чтобы загрузить новую карту, как мне легко справиться с тем, чтобы убедиться, что ничто не указывает на Плитки, которые больше не существуют. Нужно ли просто перебирать эти классы и устанавливать currentTile в NULL?
Здесь я начал действительно путаться этим материалом. Любая помощь приветствуется, поскольку я, очевидно, довольно nooby. @ _ @; И извините, если это действительно не тема игры. Если вам нужно переместить его на другой стек, просто сообщите мне или переместите его (если можете). > _ <
Проголосовали за принадлежность к StackOverflow, так как это действительно вопрос о лучших практиках C++. На боковой ноте вектор векторов для 2D-сетки довольно плох; просто используйте один вектор и вычислите смещения внутри него вручную (или напишите простую оболочку). –
@SeanMiddleditch Спасибо за подсказку о векторе векторов. Не понял, что это плохо. Просто сделал интерфейс к моей сетке плитки, которая вычисляет смещение, так что это всего лишь один вектор. ^^; – Zyaga