Rysowanie pudełek w Allegro

0

Próbuję narysować tablice(15x15) box'ów(30*30px), ale rysuje mi tylko ostatnie pudełko, a tak to mam czarny ekran. Co robię źle?

    while(1)
    {
        ALLEGRO_EVENT ev;

        al_wait_for_event(event_queue, &ev);
 
        if(ev.type == ALLEGRO_EVENT_TIMER) {
            redraw = true;
        }
        else if(ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE) 
            break;
         
        if(redraw && al_is_event_queue_empty(event_queue)) 
        {
            redraw = false;
 
            al_clear_to_color(al_map_rgb(0,0,0));
 
            for(int i=0; i<225; i++)
            {
                int row = (int) i / 15;
                box_y = 30 * row + 8;
                box_x = (i % 15) * 30 + 8;

                al_draw_bitmap(box[i], box_x, box_y, 0);

            }
            al_flip_display();
        }
    }

dodanie znacznika <code class="cpp"> - fp

0
for(int j=0; j<15; j++)
for(int i=0; i<15; i++)
{
    box_x = ...
    box_y = ...
    ...
}
0
Azarien napisał(a):
for(int j=0; j<15; j++)
for(int i=0; i<15; i++)
{
    box_x = ...
    box_y = ...
    ...
}

Nie wiem jak mi to ma pomóc...

0

Unikniesz bezsensownych wyliczeń w stylu:

int row = (int) i / 15;
box_y = 30 * row + 8;
box_x = (i % 15) * 30 + 8;

Będą krótsze.

Pokaż jak tworzysz tablicę boxów. I możesz ją naprawdę zrobić, żeby miała wymiary 15x15, to dwie pętle for będą miały jeszcze większy sens.

0

Od siebie jeszcze dodam, że dobrze jest mieć wszystkie boxy w jednej bitmapie (taki spritesheet), zamiast 225 i używania al_bitmap_draw_region do rysowania kawałków z tej bitmapy. Przynajmniej dopóki bitmapa nie jest jakaś bardzo duża (2kx2k?), żeby nie sprawiała problemów karcie graficznej. To już musisz w specyfikacji doczytać. Daje to możliwość wykorzystania ciekawej opcji w allegro. Mianowicie, gdy masz wiele (np. kilkaset) rysowań to z każdym z nich allegro musi przesłać informacje o bitmapie źródłowej do kary graficznej. Jeśli rysowanie, które odbywa się z tej samej bitmapy 'zamknie' się w wywołania funkcji
al_hold_bitmap_drawing(true)
... rysowania z tej samej bitmapy
al_hold_bitmap_drawing(false)
można zyskać na prawdę duży skok wydajności. Mówiąc 'na prawdę' mam na myśli nawet 20-30% w twoim przypadku. Może nawet więcej. Im więcej bitmap rysujesz używając tego, tym większy zysk prędkości zauważysz względem tego gdybyś nie używał al_hold_bitmap_drawing

  • dobrze jest używać bitmap o wysokości i szerokości będącymi potęgami dwójki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1