Я настроил небольшую игру-шутер в качестве учебного пособия для себя в SDL. У меня есть структура снаряда
struct projectile
{
SDL_Surface* surface;
int x;
int y;
};
И я поместил это в вектор.
vector<projectile> shot;
projectile one_shot;
И когда я нажимаю пробел, я создаю новый снаряд и добавляю его к вектору, а затем они стираются при рендеринге.
Это работает нормально, но я, кажется, в случайных случаях получаю сообщение об ошибке "Программа перестала работать".
Так что мне интересно, как правильно освободить поверхности.
- После этого я освобождаю их всех?
- Освобождаю ли я каждый отдельный снимок, когда он выходит из экрана?
- Или какой-то другой выбор?
UPDATE:
Я нашел, где происходит сбой при выходе, когда я сделал несколько выстрелов, и все они вышли из экрана. Я попытался заменить код, который добавляет поверхность к вектору, «надлежащим способом дублирования», как , показанный в этом примере , и он все еще ведет себя так же.
Так я освобождаю поверхность.
if(shot.at(i).y < 0 - shot.at(i).surface->h)
{
SDL_FreeSurface(shot.at(i).surface);
shot.erase(shot.begin() + i);
}
У любого есть идея или пример кода, на который я могу посмотреть, чтобы понять это.