如果答案是"这是不可能的",那就没关系.我不会沮丧.但我想知道,在使用C#制作游戏时,是否有任何方法可以模仿控制台模拟器的"保存状态"功能.据我所知,仿真器有点容易,它们只是转储虚拟化内存,指令指针等所有内容.因此,他们可以完全相同的方式恢复,在游戏代码中与之前完全相同的位置.我知道我无法从相同的代码行恢复,但有没有办法可以维持整个游戏状态而无需手动保存每个变量?我希望每次在游戏中添加一些内容时都不需要扩展或修改.
我猜如果有任何可行的方法,它会使用ap/invoke ...
Joe*_*oey 12
好吧,在C#中你原则上也可以这样做.它被称为序列化.同意,它与内存转储不完全相同,但足够接近.
要将类标记为可序列化,只需向其添加Serializable属性:
[Serializable]
class GameState
Run Code Online (Sandbox Code Playgroud)
有关可能更改的类的其他信息:
如果将新成员添加到可序列化类中,则可以使用该
OptionalField属性标记它们,以允许对象的先前版本进行反序列化而不会出现错误.此属性仅影响反序列化,并防止运行时在序列化流中缺少成员时抛出异常.还可以使用NonSerialized属性标记成员以指示不应序列化该成员.这将使这些成员的详细信息保密.要修改默认反序列化(例如,要自动初始化标记的成员
NonSerialized),该类必须实现IDeserializationCallback接口并定义IDeserializationCallback.OnDeserialization方法.对象可以以二进制格式序列化,以便其他.NET应用程序进行反序列化.该框架还提供了支持人类可读的跨平台XML序列化的对象
SoapFormatter和XmlSerializer对象.