2015-01-31 3 views
1

Мне было интересно, как создать несколько экземпляров одного и того же объекта на C++. У меня есть пример. Предположим, я создаю простую игру, и у меня есть объект под названием «Bullet». Если я ударил f.e. клавиша CTRL вызывает обстрел. Поэтому я создаю экземпляр Bullet. Экземпляр умирает, когда пуля попадает в что-то или выходит из окна. Но что, если у меня есть f.e. что-то вроде пулемета. Он может выстрелить много пуль в ряд. Поэтому мне нужно создать множество экземпляров Bullet, но как я могу это сделать? Должен ли я в самом начале сделать указатель, как этотЭкземпляры того же объекта в C++ (программирование игр)

Bullet *pointer; 

Затем, когда я хочу, чтобы создать экземпляр пули я выделить пространство в памяти для одного «пули». И когда я хочу создать следующую пулю, я выделяю больше места и так далее. Но когда пуля «умирает», я получил мертвое пространство в памяти ...

Так что я не знаю, как справиться с этой ситуацией. Я новичок в ООП. Я запрограммировал на C, и теперь я хочу изучить C++ через игровое программирование (это довольно весело) :-). Спасибо за ответы!

+0

Использовать 'new [type]' и 'delete' –

+0

Объект является экземпляром, поэтому нет, вы не можете сделать много экземпляров одного и того же экземпляра. – juanchopanza

+0

Как вы управляете одной пулей (объектом) до сих пор? –

ответ

2

Просто используйте std::vector<Bullet> bullets для хранения всех ваших пуль. Вы будете нуждаться все эти объекты в любом случае и std::vector воли:

  • амортизировать добавления новых объектов
  • позволяют вам shrink_to_fit, если в любой момент вектор стал слишком большим
  • позволит вам reserve определенное количество элементы в начале, фактически создавая пустой пул объектов
  • держать все объекты смежно, что делает все очень эффективный

Вы также можете попробовать std::unordered_map, который имеет практически постоянную установку и удаление времени.

+0

Год за годом, и я узнал кое-что. Я думаю, что set or unordered_set также будет отличным вариантом, если я дам каждый идентификатор пули или что-то в этом роде. –

Смежные вопросы