存档系统研究

Posted on   neocsl  阅读(378)  评论(0编辑  收藏  举报

  UDN上有一篇文章解析了存档系统,这里我解析一下存档系统是怎么工作的。所谓存档系统首先要解决的问题便是在1.游戏退出后能存储游戏的指定数据 2.是在游戏载入时载入当时指定的存储数据。

  这篇示例演示一个Actor的存储。

1.  一种Actor类,这是要存储的对象,将该对象用控制台放置在特定的位置。以后存储和加载该类。  

复制代码
class CubeMemory extends Actor;


defaultproperties
{
begin object class=DynamicLightEnvironmentComponent name=MyLight
bEnabled=true
end object
Components.add(MyLight)

begin Object class=StaticMeshComponent name=MyMesh
LightEnvironment=MyLight
end object
Components.add(MyMesh)
}
复制代码

  以上定义了一个CubeMemory Actor。

 

2.一个存储状态类GameState,该状态负责存储以及加载游戏中的参数,这里将具有的CubeMemory以及自身的位置存储在一个数组中。

复制代码
class GameState extends Object;

struct GameObjectStruct
{
local actor Reference; //Cube
local vector Location; //Cube location
};

var array<GameObjectStruct> GameObject; //global save

function AddCube(CubeMemory cube)
{
local GameObjectStruct GOS;
GOS.Location=cube.Location;
GOS.Reference=cube.;

GameObject.AddItem(GOS);
}

//save self in the bin
function SaveObject(string path)
{
class'Engine'.static.BasicSaveObject(self,path,true,1);
}


//Load self in the bin
function LoadObject(string path)
{
class'Engine'.Static.BasicLoadObject(self,path,true,1);
}



defaultproperties
{
}
复制代码


3.GameInfo类是负责加载和存储游戏执行的类

复制代码
class AntGame extends GameInfo dependson(GameState);

var GameState CurrentGameState;

event PostLogin(PlayerController NewPlayer)
{
super.PostLogin(NewPlayer);
CurrentGameState=new class'GameState'
}

exec function SpawnCube(float X,float Y,float Z)
{
local MemoryCube cube;
local vector CubeLocation;

CubeLocation.x=x;
CubeLocation.y=y;
CubeLocation.z=z;

Cube=Spawn(class'MemoryCube',,,Location);

CurrentGameState.CubeAdd(cube);
}

exec function SaveGame()
{
CurrentGameState.SaveObject("SaveGame.bin");
}


exec function Loadgame()
{
local GameObjectStruct GOS;
CurrentGameState.LoadObject("SaveGame.bin");
   foreach CurrentGameState.GameObject(GOS)
{
   GOS.Reference=spawn(class'MemoryCube',,,GOS.Location); 
}
     
}
复制代码

  以上便完成了存储系统。

 

 

 

 

 

 

 

编辑推荐:
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
阅读排行:
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 《HelloGitHub》第 106 期
· 数据库服务器 SQL Server 版本升级公告
· C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)
点击右上角即可分享
微信分享提示