2012-06-08 4 views
2

Я пишу игру в allegro и хотел бы загрузить некоторые файлы изображений. Однако, когда я вызываю al_load_bitmap, я получаю нулевой указатель. Я использую XCode 4.1 в качестве моей IDE. Я бы попробовал компиляцию с помощью g ++ (в случае, если это проблема пути), однако я не знаю, что мне нужно сделать, чтобы скомпилировать его в командной строке с g ++ (просто g ++ main.cpp не работает). В любом случае, вот мой код:Загрузка .png Файл изображения с Allegro 5

ALLEGRO_PATH *path = al_get_standard_path(ALLEGRO_RESOURCES_PATH); 

for (int i = 0; i < NUM_TILES; i++) 
{ 
    switch (static_cast<Tile>(i)) { 
     case GRASS: 
      al_set_path_filename(path, "grass.png"); 
      tileFiles[i] = al_load_bitmap(al_path_cstr(path, '/')); 
      if (!tileFiles[i]) 
      { 
       std::cerr<<"grass.png not initialized"<<std::endl; 
      } 
      break; 
     case DIRT: 
      al_set_path_filename(path, "dirt.png"); 
      tileFiles[i] = al_load_bitmap(al_path_cstr(path, '/')); 
      if (!tileFiles[i]) 
      { 
       std::cerr<<"dirt.png not initialized"<<std::endl; 
      } 
      break; 
     default: 
      std::cerr 
       << "Missing case statement for datatype Tile numbered at " 
       << i 
       << " in Board::Board (float mw, float mh, int tst)" 
       << " declared in Board.cpp." 
       << std::endl; 
      break; 
    } 
} 

Я уже запускали:

if(!al_init_image_addon()) { 
    al_show_native_message_box(display, "Error", "Error", "Failed to initialize al_init_image_addon!", 
           NULL, ALLEGRO_MESSAGEBOX_ERROR); 
    return -1; 
} 

и я также поставил:

#include "allegro5/allegro_image.h" 
#include "allegro5/allegro_native_dialog.h" 

в верхней части моего файла. Ни grass.png, ни dirt.png не загружаются, и они находятся в том же каталоге, что и файл main.cpp. Я не получаю ошибок компиляции, но я постоянно получаю нулевой указатель, когда пытаюсь загрузить мои изображения, поэтому, когда приходит время нарисовать их на дисплее, они не отображаются. Пожалуйста помоги!

+0

Когда изображение не загружается, возможно, вы можете проверить ['allegro_error'] (http://alleg.sourceforge.net/stabledocs/en/alleg000.html#allegro_error), чтобы узнать, что не так? –

+0

Что значит проверить allegro_error? – user1413793

+0

Если вы перейдете по ссылке, вы увидите, что 'allegro_error' - строковая переменная, которая может содержать сообщение об ошибке, которое может быть напечатано. –

ответ

2

Ни grass.png, ни dirt.png нагрузки, и они находятся в той же директории, что мой main.cpp файл

Просто отладки острия ... Если бы вы были для вывода результата al_path_cstr(path, '/') на консоль, должно быть предельно очевидно, почему вызов терпит неудачу.

ALLEGRO_RESOURCES_PATH - это местоположение «связанных ресурсов», которое на OS X означает каталог исполняемого файла . (Если вы собираетесь использовать пакет приложений, то это будет папка ресурса в комплекте.) В качестве быстрой проверки просто скопируйте изображения в тот же каталог, который создается исполняемый файл.

Большинство IDE имеют очень необычные структуры каталогов, IMO. Я бы в конечном итоге установил его так, чтобы вы строили нечто вроде:

/src/main.c 
/include/main.h 
/obj/release 
/obj/debug 
/bin/game.exe 
/bin/game-debug.exe 
/bin/image.png 

Но это только мое предпочтение. Используйте все, что захотите, но вы должны снова прочитать the docs, чтобы получить четкое представление о разных местах, которые показывает al_get_standard_path().

+0

ahh не думал, что я мог бы сделать объект типа ALLEGRO_PATH ... Должно быть, вы, наверное, пробовали это в первую очередь. Большое вам спасибо! Это поставило проблему. Как в стороне, как мне скомпилировать файл allegro с помощью g ++ из терминала? – user1413793

+0

Вы не можете 'cout'' ALLEGRO_PATH', но вы можете использовать 'al_path_cstr()'. Для компиляции см. Http://stackoverflow.com/a/8703901/259778 – Matthew

0

Хорошо, у меня была такая же проблема, и я был абсолютно уверен, что искал в правильном каталоге и что ресурсы для программы были там. Я использовал al_path_cstr (путь, '/'), и рабочий каталог allegro был таким, как ожидалось. Затем я посмотрел размеры файлов ресурсов ....

Все мои ресурсы в моей директории сборки были равны нулю байтами. Скопировал их по себе и этому решил вопрос. Надеюсь, это поможет кому-то!

Смежные вопросы