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.BeginInvoke(()=>
{
debugTextBlock.Text = GameData.data.distanceCovered; 
});
person Skiba    schedule 03.07.2012
comment
извините, если я звучу новичком, но где следует выполнить этот код. Я также проверял, пробовал ли я этот поток (stackoverflow.com / questions / 9320181 /) но все напрасно. - person Priyank; 04.07.2012
comment
Поскольку вы предоставили Exception beeing, мой ответ вообще не соответствует вашей проблеме. У debugTextBlock фиксированный размер или он меняет размер в соответствии с содержимым внутри? - person Skiba; 04.07.2012