Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
dimakozyr
158 / 25 / 1
Регистрация: 17.08.2013
Сообщений: 467
#1

SDL - удаление загруженного изображения - C++

16.10.2013, 16:03. Просмотров 575. Ответов 10
Метки нет (Все метки)

При запуске игры в случайном месте появляется бобер.
Нужно, чтобы он исчезал и через 2 секунды появлялся в другом месте.
Проблема в том, что изображение бобра почему-то не пропадает

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void C_GameCicle::callFunctionsForScene_2() const {
        // Загрузка изображений бобра
    o_LoadImages_GameCicle.loadImagesBeaver();
 
        // Отрисовка изображений бобра
    o_DrawScene_GameCicle.drawBeaver(&o_InitSurfaces_GameCicle, &o_LoadImages_GameCicle);
        
        // События игровой сцены
    o_SceneElements_GameCicle.scene_2_events
        (&o_InitSurfaces_GameCicle, &o_LoadImages_GameCicle, &o_DrawScene_GameCicle);
    
        // Удаление изображений бобра
    o_LoadImages_GameCicle.quitImagesBeaver();
 
        // Обновление экрана
    SDL_Flip(o_InitSurfaces_GameCicle.getScreen());
 
        // Задержка 2 секунды
    SDL_Delay(1000);
}
Методы загрузки и удаления изображений:
C++
1
2
3
4
void C_LoadImages::loadImagesBeaver() {
    img_beaver       = IMG_Load("images/beaver.png");
    img_red_beaver   = IMG_Load("images/red-beaver.png");
}
C++
1
2
3
4
void C_LoadImages::quitImagesBeaver() const {
    SDL_FreeSurface(img_beaver);
    SDL_FreeSurface(img_red_beaver);
}
0
Миниатюры
SDL - удаление загруженного изображения  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.10.2013, 16:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос SDL - удаление загруженного изображения (C++):

Как вывести текст на экран, используя библиотеку SDL TTF для SDL 2? - C++
В официальной доке как-то скомкано написано. При инициализации SDL TTF и при загрузке шрифта ошибок нет. Но текст на экране не...

C++ SDL - C++
Всем привет! Работал я значи в SDL, а потом что-то нажалось ил не нажалось и вообщем теперь, при компиляции любого(работающего,...

Оптимизация SDL - C++
Начал изучать SDL. Все бы хорошо, но процесс созданного окна кушает 25% ресурсов процессора. Когда делал по этим урокам:...

SDL Графика. - C++
Добрый день! Не могу соединить два проекта, в одном изображение переводится в ч\б, во втором тонируется изображение. Мне нужно получить...

Документация по SDL - C++
Люди , кто знает пожалуйста киньте ссылки на документацию по SDL =) Заранее спс!

SDL - Конфигурирование - C++
Всем доброго времени суток. Недавно натолкнулся проблему с настройкой SDL. Дело в том, что мне нужно отключить переадресацию stdio с...

10
dimakozyr
158 / 25 / 1
Регистрация: 17.08.2013
Сообщений: 467
16.10.2013, 17:36  [ТС] #2
Другими словами, как в SDL отменить блиттинг?
Если загрузил изображение на главный surface, то как его удалить, чтобы оно не отображалось?
0
coloc
погромист
411 / 247 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
16.10.2013, 18:00 #3
dimakozyr, а ты заливай экран вначале черным цветом. Что то вроде этого:
C++
1
SDL_FillRect(screen, &screen->clip_rect, SDL_MapRGB(screen->format, 0, 0, 0);
Или установи альфу на изображение. Это уже на всякий случай:
C++
1
SDL_SetAlpha(bober, SDL_SRCALPHA, 0);

Не по теме:

почему ты на каждой отрисовке загружаешь картинки?

1
dimakozyr
158 / 25 / 1
Регистрация: 17.08.2013
Сообщений: 467
16.10.2013, 18:49  [ТС] #4
Сейчас попробую

Цитата Сообщение от coloc Посмотреть сообщение
почему ты на каждой отрисовке загружаешь картинки?
У меня 4 сцены: экран приветствия, экран самой игры, экран паузы и экран конца игры.
Решил, что эффективней будет загружать не все сразу изображения, а загружать и удалять по мере надобности

Добавлено через 3 минуты
Цитата Сообщение от coloc Посмотреть сообщение
dimakozyr, а ты заливай экран вначале черным цветом. Что то вроде этого:
Я думал, экран по умолчанию и так черный

Цитата Сообщение от coloc Посмотреть сообщение
Или установи альфу на изображение. Это уже на всякий случай:
А что это такое и зачем это нужно? С подобным еще не сталкивался
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.10.2013, 19:58 #5
SDL_LockSurface, перерисовать, обновить. SDL_UnlockSurface, перерисовать, обновить.
1
dimakozyr
158 / 25 / 1
Регистрация: 17.08.2013
Сообщений: 467
16.10.2013, 20:02  [ТС] #6
Цитата Сообщение от alsav22 Посмотреть сообщение
SDL_LockSurface, перерисовать, обновить. SDL_UnlockSurface, перерисовать, обновить.
Можно поподробней? С перерисовать и обновить понятно, а как реализуется SDL_LockSurface и SDL_UnlockSurface?
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.10.2013, 20:08 #7
Цитата Сообщение от dimakozyr Посмотреть сообщение
а как реализуется SDL_LockSurface и SDL_UnlockSurface?
Интернет? Google?
1
dimakozyr
158 / 25 / 1
Регистрация: 17.08.2013
Сообщений: 467
17.10.2013, 00:02  [ТС] #8
Добавил SDL_LockSurface, SDL_UnlockSurface, SDL_FillRect (уже убрал), но никакой разницы нет.
Не вижу смысла, зачем это надо было делать

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
struct C_InitSurfaces {
 
    inline void initScreen() const {
        screen = SDL_SetVideoMode(960, 640, 32, SDL_SWSURFACE);
        
        if(SDL_MUSTLOCK(screen))
            SDL_LockSurface(screen);
        }
 
    inline void quitScreen() const {
        SDL_UnlockSurface(screen);
        SDL_FreeSurface(screen);
    }
 
    inline SDL_Surface* getScreen() const
        { return screen; }
 
  private:
 
      mutable SDL_Surface* screen;
};
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
17.10.2013, 00:21 #9
Что вы и куда добавляете - это вам видней, а не мне. Я вам ничего не предлагал добавлять. Должна быть выполнена последовательность:
Цитата Сообщение от alsav22 Посмотреть сообщение
SDL_LockSurface (для surface, который должен исчезнуть), перерисовать, обновить. SDL_UnlockSurface(для того же surface), перерисовать, обновить.
Тогда будет работать. Вам было предложено использовать эти методы для решения задачи. Как вы это реализуете (если сможете) это уже ваше дело. У меня, кстати, этот способ очень даже хорошо работает.
1
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
17.10.2013, 00:36 #10
....
1
Вложения
Тип файла: rar Game.rar (973.4 Кб, 10 просмотров)
dimakozyr
158 / 25 / 1
Регистрация: 17.08.2013
Сообщений: 467
17.10.2013, 01:00  [ТС] #11
Цитата Сообщение от alsav22 Посмотреть сообщение
для surface, который должен исчезнуть
Аа, понятно, а я для основного сурфейса сделал. Ладно, завтра буду разбираться
0
17.10.2013, 01:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.10.2013, 01:00
Привет! Вот еще темы с ответами:

Установка SDL 2 - C++
Из-за некоторых проблем с обработкой клавиатуры решил перейти с GLUT на SDL 2. Вопрос: как на Ubuntu установить этот самый SDL 2? ...

Странность С++ и SDL - C++
Здравствуйте уважаемые форумчане возникла непонятная ситуация вообщем писал на С++ классы и учил OpenGL и все вроде нормально как вдруг...

инициализация SDL - C++
подключил #include "SDL.h" - проверил, запустилось. добавил первую строку из статьи про работу сдл SDL_Init(SDL_INIT_VIDEO); ...

SDL mouse - C++
если обработка нажатия на левую кнопку мыши это if (occur.type == SDL_MOUSEBUTTONDOWN) if(occur.button.button == SDL_BUTTON_LEFT)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru