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