Как я могу сериализовать Lambdas и Event делегатов, когда Tombstoning на Windows Phone 7? - PullRequest
1 голос
/ 06 февраля 2011

Я использовал пример Game State Management, который работал до сих пор. Я столкнулся с загадкой: во время Tombstoning экраны сериализуются; Единственная проблема в том, что MessageBoxScreen имеет обработчики событий для Принятых и Отмененных.

Каков наилучший способ их сериализации? Я провел небольшое исследование по использованию деревьев выражений, но это казалось слишком сложным для того, что я хотел сделать.

Как вы их сериализуете? Или ... Какой альтернативный подход вы используете для сохранения состояния экрана с делегатами?

Ответы [ 2 ]

1 голос
/ 24 февраля 2011

Я решил против этого.Вместо этого я сохраняю игровой процесс как своего рода «блок-схему».

Блок-схема объявлена ​​в коде и имеет свойства «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» относится к последней добавленной фигуре.

После надгробия я просто прочитал последнюю фигуру и последний результат и решил, куда идти.блок-схема, основанная на этом.

1 голос
/ 07 февраля 2011

Я бы определенно избежал попытки сериализовать что-либо, отдаленно напоминающее лямбду, или, в этом отношении, именованные методы. Помните: вы храните состояние и ничего больше.

В зависимости от того, насколько широки и широки ваши различные назначения для этих делегатов, вы можете избежать использования Dictionary<String, WhateverDelagateType>, сериализации ключей и поиска обратных вызовов после десериализации.

Еще одна вещь, которую нужно учитывать - я не эксперт, но, читая между строк, звучит так, будто вы работаете над захоронением очень временного модального диалога. Вы действительно этого хотите? Возможно, было бы лучше, если бы он возвратил своего пользователя прямо в таблицу рекордов или что бы то ни было после вашего диалога.

...