Flare / Flutter: Как сбросить ход анимации перед ее запуском? - PullRequest
1 голос
/ 11 декабря 2019

У меня есть файл Flare с 3 анимациями, содержащимися в нем, все в одном артборде. Я понимаю, что при переключении между анимациями Flare будет смешивать анимации по умолчанию, и что при воспроизведении одной анимации значения соответствующих узлов не будут возвращены к тому, что было в кадре 0 в редакторе. Это поведение, которого я хотел бы достичь: при воспроизведении новой анимации, я хотел бы, чтобы предыдущая анимация полностью прекратилась (не смешивая их вообще) и чтобы входящая анимация начиналась в самом начале со всемиего значения по умолчанию .

Вариант использования:

  1. Воспроизвести анимацию, где, скажем, непрозрачность фигуры уменьшается до нуля
  2. Воспроизвести другую анимацию, использующуюфигура сверху, но в редакторе Flare ее непрозрачность равна 1 в начале анимации

Желаемый результат : новая анимация сбрасывает непрозрачность фигуры, а затем начинается ивоспроизводится как обычно

Фактический результат : поскольку предыдущая анимация изменила непрозрачность фигуры, новая анимация будет использовать фигуру в том виде, в каком она была в редакторе

На мой вопрос, как объяснено на GitHub, вы можете посмотреть в конце цепочки по этому вопросу (имеет gifs): https://github.com/2d-inc/Flare-Flutter/issues/14

В вышеприведенной ветке Луиджи Россо упоминает «повторное создание экземпляра» артборда,Кто-нибудь знает, что он имеет в виду под этим и как это сделать? Я попробовал несколько способов сделать это, например, методы makeInstance, найденные в таких классах, как FlutterActorArtboard, ActorNode и некоторые другие (есть несколько вариантов метода makeInstance, но все они имеют одинаковые имена и возвращаютновый артборд. Однако мне пока не повезло с заменой текущего экземпляра артборда в реализации FlareController.

Я также попытался вручную перебрать все ActorNode артборда исначала сохраняя их начальные значения, а затем копируя сохраненные значения в монтажную область каждый раз, когда воспроизводится новая анимация, но это, казалось, очень плохо ломалось (анимация была неузнаваема и просто не воспроизводилась после этого, поэтому я должен был это сделатьчто-то не так. Или я сбрасываю неправильные значения).

Любая помощь приветствуется, спасибо!

1 Ответ

1 голос
/ 16 декабря 2019

Для воспроизведения другой анимации на фигуре и сброса ее непрозрачности вы можете получить доступ к непрозрачности узла во время выполнения с помощью:

ActorNode myNode = _artboard.getNode("nodeString");
myNode.opacity = 0.00;

Как указано здесь в руководстве.

Проще говоря, в новой анимации вы можете установить ключевой кадр в редакторе Rive / Flare для непрозрачности равной 1 в начале новой анимации, чтобы при воспроизведении анимации с самого начала ееНепрозрачность будет сброшена до 1.

Для воспроизведения одной анимации, а затем полностью переопределить ее при воспроизведении следующей анимации, вы можете расширить FlareController и создать собственный контроллер анимации, чтобы сделать это в методе advance. Вот быстрый и грязный пример (не лучшие практики), чтобы дать вам представление об использовании advance: https://gist.github.com/she-who-codes/85d8f0da97abfc3ecc43b1cb470e9c29 https://gist.github.com/she-who-codes/ce633204cd2d4babfe9a5b54e34ca63d

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...