Два вопроса о двигателе пламени

#flutter #flame

Вопрос:

У меня есть несколько вопросов. Я работаю над приложением, которое использует движок пламени в расширенном виджете как часть большего приложения. Таким образом, Flame используется только в качестве графического представления кнопок и для взаимодействия.

Теперь, теоретически:

  1. Можно ли отправить значение переменной из flame в обычный текстовый виджет в моем приложении? (Я знаю, что могу прочитать начальное значение, равное 0, но тогда ничего не происходит, даже если консоль показывает увеличивающееся значение) Должен ли я написать какой-то поток для Flame и будущего в главном приложении или есть какой-либо другой вариант?
  2. Как я могу управлять представлениями в flame? Я имею в виду, что в настоящее время у меня есть два разных фона и разные анимации для каждого. В нижней части экрана в главном приложении в flutter у меня есть кнопки, которые я хотел бы использовать для изменения фона пламени и анимации по мере необходимости (простая реакция пламени на мои кнопки).

Что касается кода, мой счетчик в приложении выглядит так:

 ...
Column(
   children: [
     Text('show 1'),
     Text(_firstCounter.toString())
   ],
),
...
void CountersAndOthers() async {
  if(_gameInProgress == true){ return; }
  _gameInProgress = true;

  _testGame = new TestGame();
  _firstCounter = _testGame.counterNumeroUno;
}
 

А в Flame это простая функция onTap (), которая увеличивает счетчик int:

 @override
void onTap() async {
  counter  ;
  print(counter);
  jump();
  _timer.start();
}
 

Ответ №1:

  1. Без использования какой-либо библиотеки управления состояниями вы можете передать функцию обратного вызова для вашего виджета в свой расширенный игровой класс Flame и обновить состояние виджета с помощью этого при onTap вызове Flame.
  2. Здесь все наоборот, передайте свой игровой класс кнопкам навигации и вызовите функцию, которую вы создаете в своей игре flame, которая будет реагировать на ваши нажатия кнопок.

Существует еще несколько способов сделать это в зависимости от структуры вашего приложения.

Комментарии:

1. Звучит здорово. Насчет второго пункта — это именно то, о чем я думал. Это не должно быть большой проблемой, если я передам что — то от родителя к ребенку, однако, насколько я читал-есть проблема с подключением в противоположном направлении. Можете ли вы дать мне несколько советов или вставить какой-нибудь хороший учебник? Прямо сейчас я совершенно упускаю смысл всей этой идеи обратного вызова. И я прочитал около 4 или 5 статей, и все они не были действительно полезными, скорее вводили в заблуждение. Или это только я, идк. Заранее спасибо.

2. Итак, вы хотите создать игру в этом ребенке, а затем передать ее родителю, это то, что вы хотите сказать?

3. Точно. Я улучшил свой код и со свежей головой реализовал обратный вызов — он работает как заклинание. Спасибо вам за совет.