我现在正在快速制作一个游戏,所以我可以自学类,面向对象和头文件,但我对位图有一些疑问并加载它们
我可以使用以下方法轻松加载位图:
ALLEGRO_BITMAP *image = NULL;
image = al_load_bitmap("image.png");
但我想将visual studio中的png文件导入为资源(使用resource.h和project.rc)
我已经检查了这个资源:
https://www.allegro.cc/forums/thread/604040/865263#target
并且该代码严重破坏了我的项目(搞乱了cmath并且没有使用malloc函数) 没有其他任何东西接近我想要的东西。
有没有办法从资源加载位图,如果没有,最好的方法是将位图集成到可执行文件中,以便我不必在游戏中包含图片文件夹?
他们甚至不必是可执行文件的资源,我只是不希望他们被用户访问,我宁愿他们在可执行文件内部但又不重要。
感谢Stack Overflow的很棒的向导
答案 0 :(得分:0)
我去年开始为Allegro5项目编写内容管理器块,但从未完成任务。基本上我对这个问题的想法是加载我的所有位图,收集你需要的数据(宽度,高度,文件大小),然后编写结果结构。对于多个文件,您必须跟踪每个要写入的图像所需的偏移量(文件大小),然后以适当的顺序重新加载。单个图像的相关代码,根据需要进行扩展:
部首:
struct IMAGE_DATA
{
ALLEGRO_BITMAP *file;
int width;
int height;
int size;
};
class content_manager
{
private:
ALLEGRO_FILE *content;
char* bitmap_content_file_name;
IMAGE_DATA test;
void parse_image_file(IMAGE_DATA, char*);
public:
content_manager(void);
~content_manager(void);
void init_bitmap_content(void);
void create_bitmap_content_file(void);
};
类别:
content_manager::content_manager(void)
{
bitmap_content_file_name = "data.arbitraryextension";
}
content_manager::~content_manager(void)
{
}
void content_manager::init_bitmap_content(void)
{
content = al_fopen(bitmap_content_file_name, "rb");
al_fread(content, test.file, test.size);
}
void content_manager::create_bitmap_content_file(void)
{
parse_image_file(test, "images/image.png");
content = al_fopen(bitmap_content_file_name, "wb");
al_fwrite(content, test.file, test.size);
al_fclose(content);
}
void content_manager::parse_image_file(IMAGE_DATA data, char* path)
{
data.file = al_load_bitmap(path);
data.size = sizeof(data.file);
data.width = al_get_bitmap_width(data.file);
data.height = al_get_bitmap_height(data.file);
}
create_bitmap_content_file将扩展为包含您要打包的所有位图,然后您只需包含您在应用程序部署中生成的数据文件。