В моей игре Tower Defense, которую я делаю, когда мои враги умирают, я хочу, чтобы они умерли, верно? Значит, мне нужно их удалить. Я перешел с C++, где вы можете просто удалить экземпляры класса с помощью delete MyInstance;, но это не работает в C#. Я знаю, что в C# есть сборщик мусора, который удаляет вещи за вас, но как пометить экземпляр для удаления? Благодарю вас!!!
Как пометить экземпляр для удаления в XNA/Monogame
Ответы (2)
Вы можете явно установить для объекта значение null, которое пометит его для сборки мусора.
Enemy e = new Enemy();
// do stuff with enemy
// Set to null
e = null;
Моя рекомендация - не удалять их. Хотя у вас есть сборщик мусора, чтобы помочь, отказ от его использования часто может быть лучшим выбором с точки зрения производительности.
Подумайте о максимальном количестве врагов, которые у вас потенциально могут быть.
Создайте круговой буфер объектов Enemy: по сути, массив объектов Enemy и последний указатель.
Добавьте флаг «IsActive» к каждому врагу.
Если вы хотите создать нового врага, пройдите вперед по круговому буферу от последнего указателя, пока не найдете врага, для которого флаг IsActive установлен на false. Установите последний указатель на этого врага, придайте этому врагу тот тип, который вам нужен, и установите для его флага IsActive значение true.
Когда враг умирает, установите для его флага IsActive значение false.
В циклах Update и Draw вы просто перебираете буфер и либо действуете, либо рисуете каждого врага, для которого IsActive установлено в true.