【问题标题】:Allegro window modeAllegro 窗口模式
【发布时间】:2014-05-11 04:57:25
【问题描述】:

我无法创建一个适合我的地图的窗口。 Allegro 4.2 只显示了我地图的 70%;我试过改变窗口的大小,但它在我的地图大小下停止工作,我也在set_gfx_mode 中尝试过FULLSCREEN。这是我正在使用的代码:

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();
  }
}

【问题讨论】:

    标签: allegro


    【解决方案1】:

    您的地图比屏幕大。你用这个画石头:

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

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

    由于您的地图被声明为:

    char map[30][30]
    

    您需要 30*30 x 30*30 = 900 x 900 像素来保存它,但您的缓冲区只有 640,480。

    所以要么让你的地图更小(char map [21][16] 与你当前的缓冲区),或者缓冲区更大(900 x 900 与你当前的地图)。

    【讨论】:

      【解决方案2】:

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

      1. 检查地图像素的总大小,看看它是否太大而无法放入内存或使用不受支持的分辨率,进行更改,然后将窗口更改为该大小。
      2. 实现一个允许滚动的摄像头系统,这样您就可以拥有固定的窗口大小,并且只需滚动地图以使其仅适合屏幕上的一部分。

      解决方案二的实现是非常具体的,所以我不能向您展示任何示例代码,但一个提示是您将所有地图写入其大小的缓冲区,然后使用相机 X 和 Y 进行 blit该映射的一部分到显示位图。祝你好运!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多