Allegro窗口模式

时间:2014-05-11 04:57:26

标签: allegro

我无法创建一个适合我地图的窗口。 Allegro 4.2只显示了我地图的70%;我已经尝试更改窗口的大小,但它停止在我的地图大小上工作,我还在FULLSCREEN中尝试了set_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();
  }
}

2 个答案:

答案 0 :(得分:0)

据我所知,您的地图比屏幕大,并且您尝试将其放在屏幕上。至少有两种可能的解决方案:

  1. 检查地图像素的总大小,看它是否只是太大以适应内存或使用不支持的分辨率,进行更改然后将窗口更改为该大小。
  2. 实施一个允许滚动的相机系统,以便您可以拥有固定的窗口大小,只需滚动地图以适应屏幕上的一部分。
  3. 解决方案二的实现非常具体,所以我无法向您展示任何示例代码,但一个提示是您将所有地图写入缓冲区大小然后,使用相机X和Y只是blit该地图的一部分到显示位图。祝你好运!

答案 1 :(得分:0)

您的地图比屏幕大。你用这个绘制岩石:

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

这意味着地图的每个图块都是30x30像素。

由于您的地图被声明为:

char map[30][30]

你需要一个30 * 30乘30 * 30 = 900乘900像素来保持它,但你的缓冲区只有640,480。

所以要么你的地图更小(使用当前缓冲区的char map [21] [16]),要么更大的缓冲区(当前地图为900乘900)。