Библиотека Allegro C ++ - PullRequest
       2

Библиотека Allegro C ++

0 голосов
/ 30 апреля 2011

У меня была эта проблема некоторое время. Когда я компилирую эту часть своего кода, он показывает черные линии над растровыми изображениями. В чем может быть проблема и есть ли решения?

void start()
{
    FONT *verdana;
    PALETTE palette;
    verdana = load_font("verdana.pcx", palette, NULL);
    clear_to_color(screen,makecol(0,0,0));
    SAMPLE *tac = load_sample("clunk.wav");

    topce_bmp=load_bitmap("topce.bmp",NULL);
    palki_bmp=load_bitmap("palka.bmp",NULL);

    int cred_anim=255;
    int cred_anim_fade=0;
    SPEED=4;
    int timer=0;      
    while(cred_anim_fade!=255)
    {
         line( screen, 3, 0, 3, 600, makecol( cred_anim_fade, cred_anim_fade, cred_anim_fade));
         line( screen, 797, 0, 797, 600, makecol( cred_anim_fade, cred_anim_fade, cred_anim_fade));
         if(key[KEY_ENTER])
         {
              menu(0,NULL);
         }

//      BATS


        if(y>0&&y<400)
        {
           y=posy-100;
        }
        else if(y<=0) y=1;
        else if(y>=400) y=399;

        draw_sprite( screen,palki_bmp, 20, y);

        if(y1>0&&y1<400)
        {
            y1=posy-100;
        }
        else if(y1<=0) y1=1;
        else if(y1>=400) y1=399;

        draw_sprite( screen,palki_bmp, 765, y1);
        rest(10);
        cred_anim_fade++;
    }

    while (timer!=1000)
    {

        if(key[KEY_ENTER])
         {
              menu(0,NULL);
         }

        timer++;
        acquire_screen();

        clear_to_color(screen,makecol(0,0,0));


//      BORDERS

         line( screen, 3, 0, 3, 600, makecol( 255, 255, 255));
         line( screen, 797, 0, 797, 600, makecol( 255, 255, 255));

//      BATS


        if(y>0&&y<400)
        {
           y=posy-100;
        }
        else if(y<=0) y=1;
        else if(y>=400) y=399;

        draw_sprite( screen,palki_bmp, 20, y);

        if(y1>0&&y1<400)
        {
            y1=posy-100;
        }
        else if(y1<=0) y1=1;
        else if(y1>=400) y1=399;

        draw_sprite( screen,palki_bmp, 765, y1);



//      COLLISION X-AXIS

        if(check_posy==1)
        {
            if(posy<15) 
            {
                posy=posy+SPEED;
                check_posy=1;
            }
            else if(posy>585) 
            {
                posy=posy-SPEED;
                check_posy=2;
            }
            else posy=posy+SPEED;
        }
        else if(check_posy==2)
        {
            if(posy<15) 
            {
                posy=posy+SPEED;
                check_posy=1;
            }
            else if(posx>585) 
            {
                posy=posy-SPEED;
                check_posy=2;
            }
            else posy=posy-SPEED;
        }


//       COLLISION WITH BATS

        if(check_posx==1)
        {
            if(posx<50&&posy>y&&posy<y+200) 
            {
                SPEED=SPEED+3;
                posx=posx+SPEED;
                check_posx=1;
                play_sample(tac,500, 100, 1000, 0);
            }
            else if(posx>750&&posy>y1&&posy<y1+200) 
            {
                SPEED=SPEED+3;
                posx=posx-SPEED;
                check_posx=2;
                play_sample(tac,500, 0, 1000, 0);
            }
            else posx=posx+SPEED;
        }
        else if(check_posx==2)
        {
            if(posx<50&&posy>y&&posy<y+200) 
            {
                SPEED=SPEED+3;
                posx=posx+SPEED;
                check_posx=1;
                play_sample(tac,500, 100, 1000, 0);
            }
            else if(posx>750&&posy>y1&&posy<y1+200) 
            {
                SPEED=SPEED+3;
                posx=posx-SPEED;
                check_posx=2;
                play_sample(tac,500, 0, 1000, 0);
            }
            else posx=posx-SPEED;
        }

        draw_sprite( screen,topce_bmp, posx-13, posy-10);

        rest(10);
    }
    clear_to_color(screen,makecol(0,0,0));
    textout_centre_ex(screen, verdana, "PONG!",400,320, makecol(cred_anim,0,0),makecol(0,0,0));
    textout_centre_ex(screen, verdana, "Vistinska igra.",400, 420, makecol(cred_anim,cred_anim,cred_anim),makecol(0,0,0));
    rest(3000);
    while(cred_anim!=0)
    {
        clear_to_color(screen,makecol(0,0,0));
        textout_centre_ex(screen, verdana, "PONG!",400,320, makecol(cred_anim,0,0),makecol(0,0,0));
        textout_centre_ex(screen, verdana, "Vistinska igra.",400, 420, makecol(cred_anim,cred_anim,cred_anim),makecol(0,0,0));
        cred_anim--;
        rest(1);
    }
}

1 Ответ

1 голос
/ 30 апреля 2011

Всего несколько идей относительно кода:

-Вы вызываете acqu_screen (), но никогда не вызываете release_screen ().ЭТО ПЛОХО, не говоря уже о всех предупреждениях, которые allegro дает вам в документации для acqu_screen () .

- «Черные линии» немного расплывчаты (когда, где и к чемунасколько они появляются?) но это также может быть проблемой с рисованием непосредственно на экране, основываясь на вашем комментарии о том, как clear_to_color (), кажется, вызывает проблему.Попробуйте двойную буферизацию , которая может решить несколько проблем.

Надеюсь, это поможет.Даже если это не решит вашу проблему, это хорошие вещи, о которых нужно помнить.

...