Я создаю интерфейс для игры XNA и, похоже, ничего не могу понять.Я новичок в программировании и чувствую, что мне не хватает чего-то очевидного.
Я создаю сетку уровней, очень похожую на то, что вы видели в Angry Birds.
Количествоуровни будут переменными, поэтому я не хочу их статически программировать.
Все кнопки, которые я использую для значков уровня, создаются динамически во время выполнения на основе списка объектов уровня.При создании кнопок я настраивал все события нажатия, чтобы указывать на один метод, который должен определять, на какую кнопку они нажали, и загружать этот определенный уровень.
Моя проблема в том, что я не могу найти надежный способ фактически сказать, на какую кнопку они нажали и связал это с одним из моих объектов уровня в списке. Я чувствую, чтоЯ, должно быть, упускаю что-то чрезвычайно очевидное.
То, что я до сих пор пробовал:
Когда я генерирую кнопки динамически, я добавляю их как дочерние элементы в сетку.Поэтому я попытался использовать порядковый номер отправителя в качестве порядкового номера в моем списке уровней (поскольку они должны иметь одинаковое количество элементов).Например: App.CurrentLevel = PuzzleLevelsGrid.Children.IndexOf (отправитель как кнопка);
Это прекрасно работало, когда я в первый раз переходил на экран выбора уровня, но всякий раз, когда я возвращался к нему, дети моей сеткипо какой-то причине сбрасывается до 0, поэтому он выходит из строя.Я установил точки останова, и я не могу объяснить, как он устанавливается в 0. Я загружаю потомки в свой onNavigatedTo (), и когда-то между окончанием этого и я нажимаю кнопку, чтобы загрузить уровень, он стирается.
Другая вещь, которую я попробовал, была настройка объекта кнопки внутри моего фактического объекта уровня, затем при динамическом создании кнопок уровня я фактически вносил изменения в свойство кнопки на соответствующем уровне.
Затем, когда мне нужновыяснить, какая кнопка была отправителем. Я просто перебираю все уровни и сопоставляю отправителя со свойством кнопки.Этот метод действительно работал довольно хорошо ... пока я не начал пытаться загружать свои уровни, используя фоновый рабочий поток.Рабочий поток не может иметь дело с Button, потому что он имеет отношение к пользовательскому интерфейсу и вылетает.
Как я уже сказал, я новый программист, поэтому я приветствую любые отзывы.Заранее спасибо.