2014-05-11 59 views
0

我被困在創建一個適合我的地圖的窗口。 Allegro 4.2僅顯示我地圖的70%;我試過改變窗口大小,但它停止工作在我的地圖大小,我也試過FULLSCREENset_gfx_mode。這是我使用的代碼:快板窗口模式

BITMAP* buffer; 
BITMAP* rock; 

char map[30][30] {-- -the map-- -}; 

void draw_map() { 
    int row, col; 
    for(row = 0; row < 30; row++) { 
    for(col = 0; col < 30; col++) { 
     if(mapa[row][col] == 'X') { 
     draw_sprite(buffer, rock, col * 30, row * 30) ; 
     } 
    } 
    } 
} 

void onscreen() { 
    blit(buffer, screen, 0, 0, 0, 0, 640, 480); 
} 

int main() { 
    //allegro default code 
    set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0); 
    buffer = create_bitmap(640, 480); 
    rock = load_bitmap("rock.bmp", NULL); 
    while(!key[KEY_ESC]) { 
    draw_map(); 
    onscreen(); 
    } 
} 

回答

0

我的理解是,你有一個地圖,比屏幕大,並嘗試以適應在屏幕上。至少有兩種可能的解決方案是:

  1. 查看一下地圖的總像素大小,如果它僅僅是太大,無法在內存或使用不支持的分辨率,進行更改,然後改變這個尺寸的窗戶。
  2. 實現一個允許滾動的攝像機系統,以便您可以擁有固定的窗口大小,只需滾動地圖即可在屏幕上只顯示一部分地圖。

解決方案二的實現非常具體,因此我不能向您展示任何示例代碼,但小費是您將所有映射寫入緩衝區,然後使用相機X和Y只是將該映射的一部分映射到顯示位圖。祝你好運!

0

您的地圖比屏幕大。你用這個畫出岩石:

draw_sprite(buffer, rock, col * 30, row * 30) ; 

這意味着你的地圖的每個圖塊都是30x30像素。

由於作爲地圖聲明:

char map[30][30] 

你需要30 * 30 = 900 30 * 30 900像素拿着它,但你的緩衝區只有640,480。因此,要麼使你的地圖更小(char map [21] [16]與你當前的緩衝區),要麼緩衝區更大(使用當前地圖900 x 900)。