Как да маркирам екземпляр за изтриване в XNA/Monogame

В моята игра отбранителна кула, която правя, когато враговете ми умрат, добре, искам те да умрат, нали? Така че трябва да ги изтрия. Идвам от C++, където можете просто да изтриете екземпляри на клас с delete MyInstance;, но това не работи в C#. Знам, че в C# има събирач на боклук, който изтрива неща вместо вас, но как да маркирате екземпляр за изтриване? Благодаря ти!!!


person Detinator10    schedule 12.12.2013    source източник
comment
Отговорът на @Mariano е добър, освен че не забравяйте да спрете да актуализирате и рисувате врага си, след като го зададете на нула, за да сте сигурни, че няма да възникнат грешки.   -  person Battle_Pasture    schedule 12.12.2013
comment
Благодаря ви за всички отговори момчета! и двамата бяха добри! Все пак трябваше да използвам marianos, защото съм начинаещ и просто имах нужда от прост отговор. Все пак благодаря и на двамата!   -  person Detinator10    schedule 12.12.2013


Отговори (2)


Можете изрично да зададете обект на null, което ще го маркира за събиране на боклук.

Enemy e = new Enemy();

// do stuff with enemy

// Set to null
e = null;
person Mariano    schedule 12.12.2013
comment
Въпреки че този отговор е по същество правилен, той също е безсмислен, защото веднага щом екземплярът излезе извън обхвата, той така или иначе ще бъде маркиран за изтриване. Препоръчвам ДА НЕ придобивате навик да правите това за четливост на кода. - person craftworkgames; 12.12.2013

Моята препоръка е да не ги изтривате. Въпреки че имате събирач на боклук, който да ви помогне, неизползването му често може да бъде най-добрият избор от гледна точка на производителността.

Помислете за максималния брой врагове, които потенциално бихте могли да имате.

Създайте кръгъл буфер от вражески обекти: по същество масив от вражески обекти и последен указател.

Добавете флаг "IsActive" към всеки враг.

Когато искате да създадете нов враг, преминете напред през кръговия буфер от последния показалец, докато намерите враг, чийто флаг IsActive е зададен на false. Задайте последния указател към този враг, направете този враг в типа, който ви интересува, и задайте флага му IsActive на true.

Когато врагът умре, задайте неговия флаг IsActive на false.

Във вашите цикли Update и Draw вие просто итерирате през буфера и или действате, или рисувате всеки враг, който има IsActive, зададен на true.

person RomSteady    schedule 12.12.2013