Allegro 5 как спрятать / выгрузить растровое изображение

Я программирую простую 2D-игру, и я столкнулся с небольшой, но раздражающей проблемой, я не могу выгрузить растровые изображения. Например, когда игра запускается, появляется заставка с изображением, которое должно быть выгружено через 2 секунды (как и в любых играх, когда она запускается, мы можем увидеть название компании, которая сделала это...). Через 2 секунды растровое изображение не выгружается.

Код:

void SplashScreen::loadContent()
{   
    image1 = al_load_bitmap("SplashScreen/image1.png");
    image2 = al_load_bitmap("SplashScreen/image2.png");

    al_draw_bitmap(image1, 0, 0, NULL);
    al_flip_display();
    al_rest(2);
    al_destroy_bitmap(image1);
    al_flip_display();

    al_draw_bitmap(image2, 0, 0, NULL);
    al_flip_display();
    al_rest(2);
    al_destroy_bitmap(image2);
    al_flip_display();
}

Спасибо за вашу помощь и ваш просмотр.

1 ответ

Решение

Чтобы "выгрузить" ваше растровое изображение, вам нужно сделать еще кое-что. Не существует такого понятия, как "очистка одного растрового изображения без очистки экрана", по крайней мере, не так, как вы хотите.

В этом случае я думаю, что вы действительно хотите очистить весь экран.

Вы хотите что-то подобное

void SplashScreen::loadContent() {   
    image1 = al_load_bitmap("SplashScreen/image1.png");
    image2 = al_load_bitmap("SplashScreen/image2.png");

    //clear screen
    clearScreen();

    //draw your splash
    al_draw_bitmap(image1, 0, 0, NULL);

    //display it
    al_flip_display();

    //wait for 2 seconds
    al_rest(2);

    //fresh new frame
    clearScreen();

    //draw this second image, I don't know what this is
    al_draw_bitmap(image2, 0, 0, NULL);

    //display it
    al_flip_display();

    //wait for 2 seconds
    al_rest(2);

    //fresh screen again
    clearScreen();

    //display it
    al_flip_display();
}

Общая процедура рисования для игры выглядит примерно так
1-очистить экран
2-рисовать все, что вы хотите
3-флип дисплей
4- подождите несколько миллисекунд
5-перезапустить обратно на 1

Таким образом, вы получите новый экран в начале каждого кадра. Единственная разница для заставки в том, что вы ждете 2 секунды, а не несколько миллисекунд

В конце вашей программы вызовите destroy_bitmap, чтобы освободить ресурсы.

Другие вопросы по тегам