Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Allegro 5] Nieskończone przewijanie bitmapy

Ostatnio zmodyfikowano 2015-08-17 22:34
Autor Wiadomość
CTRL85
Temat założony przez niniejszego użytkownika
[Allegro 5] Nieskończone przewijanie bitmapy
» 2015-08-17 14:30:42
Witam!

Robię grę i potrzebuję uzyskać efekt nieskończonego przewijania się tła. Wie ktoś jak to zrobić? Po kilku nieudanych próbach stwierdziłem, że najlepiej będzie to zrobić używając dwóch bitmap, jednak nie wiem jak ustalić ich pozycje tak aby nie było widać przeskoku.

Pozdrawiam.
P-136418
pekfos
» 2015-08-17 18:30:47
Jak przewijasz tło w lewo, to pozycja bitmapy w osi X to 0 lub mniej. Jeśli pozycja bitmapy + jej szerokość jest mniejsza od 0, to nie musisz jej wyświetlać, bo jest w całości ukryta za lewą krawędzią ekranu. A jeśli jest mniejsza od szerokości ekranu, to nie zakrywa całości. Od tej krawędzi bitmapy wyświetlasz następną. I tak w kółko, aż zakryjesz cały ekran w osi X. I analogicznie dla innych kierunków przewijania i osi Y, jeśli jest to potrzebne.
P-136429
CTRL85
Temat założony przez niniejszego użytkownika
» 2015-08-17 22:34:50
Dzięki za pomoc.

Ruch w płaszczyźnie y, zostawiam uproszczony kod dla potomnych:

C/C++
int background_position =( al_get_bitmap_height( background_bitmap1 ) ) *( - 1 ) + resolution_y;
int background_height = al_get_bitmap_height( background_bitmap1 );

while( 1 )
{
    if( game_event.type == ALLEGRO_EVENT_TIMER )
    {
        background_position += 6;
       
        if( background_position > background_height )
             background_position = 0;
       
    }
    if( al_is_event_queue_empty( game_queue ) )
    {
        al_draw_bitmap( background_bitmap1, 0, background_position, 0 );
       
        if( background_position > 0 )
             al_draw_bitmap( background_bitmap2, 0, background_position - background_height, 0 );
       
    }
}

Pewnie da się zrobić prościej, ale takie rozwiązanie działa i jestem zadowolony.
P-136453
« 1 »
  Strona 1 z 1