2014-05-11 66 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)。