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);
}
}
以上便完成了存储系统。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 深入理解 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)