WP7 : SL/XNA : показва XNA данни в Silverlight

Работя върху игра Silverlight/XNA. Имайки структура като тази:

  • Моят клас GamePlay е наследен от InGamePage.
  • Където InGamePage е наследено от PhoneApplicationPage.
  • InGamePage има метод OnLayoutUpdated за изобразяване на SL контроли (с помощта на UIElementRenderer).

Това е според SL/XNA примерен код

Всичко работи добре, докато не реших да създам текстов блок в gamepage.xaml. Искам този текстов блок да показва някои статични променливи на играта (като разстояние, изминато от героя).

Сега къде трябва да напиша този ред:

debugTextBlock.Text = GameData.data.distanceCovered; 

така че текстовият блок показва текущите стойности. (Опитах се да закача LayoutUpdate, но изхвърлянето на Application_UnhandledException казва „Открит е цикъл на оформление. Оформлението не може да бъде завършено.“)

Всеки съвет/връзка е високо оценен.


person Priyank    schedule 03.07.2012    source източник
comment
Какво е изключение, което се хвърля?   -  person Rowland Shaw    schedule 03.07.2012
comment
@Rowland редактира въпроса, но изключението е (Открит цикъл на оформление. Оформлението не можа да бъде завършено.)   -  person Priyank    schedule 04.07.2012
comment
Видяхте ли този по-ранен въпрос?   -  person Rowland Shaw    schedule 04.07.2012
comment
това не помогна много @Rowland, предполагам, че неговият SL+XNA се съпротивлява на два контрола за изобразяване едновременно. Защото, ако се опитам да актуализирам debugTextBlock.Text при всяко събитие, той работи добре.   -  person Priyank    schedule 04.07.2012
comment
Ще помогне, ако обясните откъде се опитвате да зададете текста -- ако е от вашия отменен OnLayoutUpdated мога да разбера, че се опитвате да промените нещо по време на изобразяване (което може да промени позициите на куп други неща) - вече сте забелязали, че ако промените мястото, където актуализирате текста, ще работи, така че това звучи като вашето решение.   -  person Rowland Shaw    schedule 04.07.2012
comment
Добре, нека направя това по-ясно. В моята SL+XNA игра SL контролите се чертаят с помощта на UIElementRenderer, а XNA играта с помощта на spritebatch. Сега искам моите променливи на играта да бъдат начертани върху текстов блок с възможност за превъртане, който ми показва текущите стойности. В момента стойностите се актуализират само когато докосна текстовия блок (тъй като присвоявам текст на събитието gotfocus.)   -  person Priyank    schedule 05.07.2012


Отговори (1)


Мисля, че простото използване на Dispatcher може да работи:

Dispatcher.BeginInvoke(()=>
{
debugTextBlock.Text = GameData.data.distanceCovered; 
});
person Skiba    schedule 03.07.2012
comment
съжалявам, ако звуча новак, но къде трябва да се изпълни този код. Проверих, че пробвах и тази тема (stackoverflow.com /questions/9320181/), но всичко напразно. - person Priyank; 04.07.2012
comment
Тъй като предоставихте изключение, отговорът ми изобщо не съвпада с вашия проблем. Фиксиран ли е размерът на debugTextBlock или той променя размера според съдържанието вътре? - person Skiba; 04.07.2012