游戏快速数据载入

#游戏快速数据载入

来自《游戏编程精粹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;
}

转载于:https://my.oschina.net/skyhacker2/blog/371369

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值