1

我一直在使用到目前为止有效的游戏状态管理示例。不过我遇到了一个问题:当墓碑时,屏幕是序列化的;唯一的问题是,MessageBoxScreenAccepted 和 Cancelled 都有事件处理程序。

序列化这些的最佳方法是什么?我对使用表达式树进行了一些研究,但这对于我想做的事情来说似乎过于复杂。

你如何序列化这些?或者...您使用什么替代方法来保存包含代表的屏幕状态?

4

2 回答 2

1

我决定反对这个。相反,我坚持将游戏流程作为一种“流程图”。

流程图在代码中声明并具有属性“LastShape”和“LastResultFromShape”。

在我的代码中,我每次都重建流程图定义,如下所示:

flowChart.AddShape( "ShowSplash" );
flowChart.AddLine( "MainMenu", ()=>lastResult=="Clicked" || lastResult=="TimedOut");

flowChart.AddShape( "MainMenu");
flowChart.AddLine( @"ShowOptions", ()=>lastResult=="OptionsClicked");
flowChar.AddLine( @"ShowSplash", ()=>lastResult==@"TimedOut");

etc.etc.

流程自上而下进行,因此“AddLine”与添加的最后一个形状相关。

墓碑化后,我只阅读最后一个形状和最后一个结果,并根据它决定流程图中的位置。

于 2011-02-24T11:34:15.007 回答
1

我绝对会避免尝试序列化任何远程类似于 lambda 的东西,或者就此而言,命名方法。请记住:您正在存储state,仅此而已。

根据您对这些委托的各种分配的范围和范围,您可能能够避免维护 a Dictionary<String, WhateverDelagateType>、序列化键并在反序列化后查找回调。

另一件要考虑的事情——我不是专家,但从字里行间看,听起来好像你正在努力建立一个非常临时的模态对话框。你真的想要那个吗?您可能最好在他/她返回时将您的用户直接带到高分表,或者您的对话之后的任何内容。

于 2011-02-07T01:17:03.800 回答