Tag Archives: fade in

Fade In/Out com Allegro

Há um tempinho atrás eu postei um código de Fade in/out com fblend que eu adaptei do código que peguei no Allegro.cc. Mas eu nem pensei, que tem gente que não precisa usar a fblend (ainda), e sempre me perguntam como fazer isso. Então vou postar aqui como usar aquele código.

Acredito que o jeito mais fácil, seja adicionar estas funções no seu arquivo fonte:

void highcolor_fade_in(BITMAP *bmp_orig, int speed)
{
   BITMAP *bmp_buff;

    if ((bmp_buff = create_bitmap(SCREEN_W, SCREEN_H)))
    {
        int a;
        if (speed <= 0) speed = 16;

        for (a = 0; a < 256; a+=speed)
        {
            clear(bmp_buff);
            set_trans_blender(0,0,0,a);
            draw_trans_sprite(bmp_buff, bmp_orig, 0, 0);
            vsync();
            blit(bmp_buff, screen, 0,0, 0,0, SCREEN_W, SCREEN_H);
        }
        destroy_bitmap(bmp_buff);
    }

    blit(bmp_orig, screen, 0,0, 0,0, SCREEN_W, SCREEN_H);
}

void highcolor_fade_out(int speed)
{
    BITMAP *bmp_orig, *bmp_buff;

    if ((bmp_orig = create_bitmap(SCREEN_W, SCREEN_H)))
    {
        if ((bmp_buff = create_bitmap(SCREEN_W, SCREEN_H)))
        {
            int a;
            blit(screen, bmp_orig, 0,0, 0,0, SCREEN_W, SCREEN_H);
            if (speed <= 0) speed = 16;

            for (a = 255-speed; a > 0; a-=speed)
            {
                clear(bmp_buff);
                set_trans_blender(0,0,0,a);
                draw_trans_sprite(bmp_buff, bmp_orig, 0, 0);
                vsync();
                blit(bmp_buff, screen, 0,0, 0,0, SCREEN_W, SCREEN_H);
            }
            destroy_bitmap(bmp_buff);
        }
        destroy_bitmap(bmp_orig);
    }

    rectfill(screen, 0,0, SCREEN_W,SCREEN_H, makecol(0,0,0));
}

E depois só chamar as funções, mas você pode criar um arquivo fonte, colocar estas funções e então criar um arquivo header e colocar as respectivas declarações das funções.

Tá, mas como se usa?

Assim… A função fade_in, vai do pretão para uma imagem, então você tem que ter esta imagem que você quer que apareça (tela inteira) em um BITMAP, então você faz isso:

highcolor_fade_in(bitmap, 16);

Lembrando que quanto maior for o valor dado a velocidade (no caso ), mas rápido vai ser, e este valor vai de 1 a 255.

Já a função de fade_out, que transforma da imagem atual para o preto, é assim:

highcolor_fade_out(16);

E a regra para a velocidade é a mesma do fade_in! ^^

Bom, é isso ae pessoal, artigo simples para iniciantes! :)

Flw

Google Buzz

Fade In/Out com fblend no Allegro

Acho que muita gente já deve ter usado aquele famoso código de fade in/out que tem no site da Allegro.cc, certo? Eu mesmo uso ele bastante! Mas como todo mundo também já deve saber, as rotinas de blend da Allegro são lentas, por isso existe a biblioteca addon fblend, que é bem mais rápida.

Se você estiver utilizando ela no seu projeto e desejar usar fade in/out, você pode utilizar estas funções aqui:

void fade_in(BITMAP *bmp_orig, int speed)
{
   BITMAP *bmp_buff;

    if ((bmp_buff = create_bitmap(SCREEN_W, SCREEN_H)))
    {
        int a;
        if (speed <= 0) speed = 16;

        for (a = 0; a < 256; a+=speed)
        {
            clear(bmp_buff);
            fblend_trans(bmp_orig, bmp_buff, 0, 0, a);
            blit(bmp_buff, screen, 0,0, 0,0, SCREEN_W, SCREEN_H);
        }
        destroy_bitmap(bmp_buff);
    }

    blit(bmp_orig, screen, 0,0, 0,0, SCREEN_W, SCREEN_H);
}

void fade_out(int speed)
{
    BITMAP *bmp_orig, *bmp_buff;

    if ((bmp_orig = create_bitmap(SCREEN_W, SCREEN_H)))
    {
        if ((bmp_buff = create_bitmap(SCREEN_W, SCREEN_H)))
        {
            int a;
            blit(screen, bmp_orig, 0,0, 0,0, SCREEN_W, SCREEN_H);
            if (speed <= 0) speed = 16;

            for (a = 255-speed; a > 0; a-=speed)
            {
                clear(bmp_buff);
                fblend_trans(bmp_orig, bmp_buff, 0, 0, a);
                blit(bmp_buff, screen, 0,0, 0,0, SCREEN_W, SCREEN_H);
            }
            destroy_bitmap(bmp_buff);
        }
        destroy_bitmap(bmp_orig);
    }

    rectfill(screen, 0,0, SCREEN_W,SCREEN_H, makecol(0,0,0));
}

Que nada mais são do que aquelas funções que tem no site da A.cc, só que com o fblend, não com o blend do Allegro.

Se você não sabe o que é a fblend, aguarde mais um pouco que logo eu pretendo fazer um tutorialzinho básico de como instalá-la e usá-la! =D

Bom uso!

Google Buzz