#游戏快速数据载入
来自《游戏编程精粹1》- 快速数据载入技巧
最快的数据载入:
在C++中,把GameData对象用fwrite写到二进制文件里面,然后再用fread读进来,中间没有任何格式上的转换。
#include <stdio.h>
class GameData
{
public:
bool save(char* fileName);
bool load(char* fileName);
int x = 0;
int y = 0;
private:
static FILE* file;
};
#include "GameData.h"
FILE* GameData::file;
bool GameData::save(char *fileName)
{
file = fopen(fileName, "wb");
if (file) {
fwrite(this, sizeof(GameData), 1, file);
fclose(file);
return true;
} else {
return false;
}
}
bool GameData::load(char *fileName)
{
file = fopen(fileName, "rb");
if (file) {
fread(this, sizeof(GameData), 1, file);
fclose(file);
return true;
} else {
return false;
}
}
注意这里要使用sizeof(GameData)而不是sizeof(this),后者是返回一个指针的大小。
测试代码:
#include <iostream>
#include "GameData.h"
using namespace std;
int main(int argc, const char * argv[]) {
GameData data;
printf("x = %d, y = %d\n", data.x, data.y);
// 更新data的值
data.x = 1;
data.y = 2;
// 保存
data.save("/Users/eleven/projects/C++/快速载入游戏数据/data.db");
GameData data2;
//数据2
printf("x = %d, y = %d\n", data2.x, data2.y);
// 加载数据
data2.load("/Users/eleven/projects/C++/快速载入游戏数据/data.db");
printf("x = %d, y = %d\n", data2.x, data2.y);
return 0;
}