У меня есть полностью рабочая петля логика игры, где компонент эффекта (Movetoeffect) успешно добавляется в SpriteComponent в дереве игры, но он не дает визуального движения на моем физическом устройстве (Redmi, Android 10). Журналы отладки подтверждают, что вся цепочка событий стреляет правильно. game.add (Swapanimation).
Swapanimation Component (Onload): его нагрузка называется, и он успешно добавляет перемещение в целевую игру. /> Подтверждено, что вся игровая логика, управление состоянием и добавление компонентов выполняется с помощью журналов печати.
Исправлена все ошибки синхронизации всех состояний (например, «Призрачные кусочки» правильно удалены).
выполнил полную дезинфекцию среды: Flutter Clean, Delet Pubspec.lock, Ran Fluth (3.32.2).
Полностью переустановил расширения DART /Flutter в коде VS.
Проблема сохраняется в совершенно новом, минимальном тестовом проекте.
My Fluther Doct -v -это чисто: < /p>
[✓] Flutter (канал стабильный, 3.32.2, ...)
[✓] и инструмент Toolchain ..... ...
...
...
...
...
. pubspec.yaml использует:
flame: ^1.17.0
Учитывая, что логика подтверждается, что он работает, что может привести к тому, что пламя не обновлять прогресс эффекта на конкретном устройстве?// lib/src/utils/animations.dart
import 'dart:async';
import 'dart:math';
import 'package:flame/components.dart';
import 'package:flame/effects.dart';
import 'package:flutter/animation.dart';
import '../engine/petal_piece.dart';
class SwapAnimation extends Component {
final PetalPiece piece1;
final PetalPiece piece2;
final void Function()? onComplete;
SwapAnimation({required this.piece1, required this.piece2, this.onComplete});
@override
Future onLoad() async {
final initialPosition1 = piece1.position.clone();
final initialPosition2 = piece2.position.clone();
final futures = [];
void addEffect(Component component, Effect effect) {
final futureOr = component.add(effect);
if (futureOr is Future) {
futures.add(futureOr);
}
}
addEffect(
piece1,
MoveToEffect(
initialPosition2,
EffectController(duration: 0.3, curve: Curves.easeInOut),
),
);
addEffect(
piece2,
MoveToEffect(
initialPosition1,
EffectController(duration: 0.3, curve: Curves.easeInOut),
),
);
addEffect(piece1, RotateEffect.to(0.3, EffectController(duration: 0.3)));
addEffect(piece2, RotateEffect.to(-0.3, EffectController(duration: 0.3)));
if (futures.isNotEmpty) {
await Future.wait(futures);
}
piece1.angle = 0;
piece2.angle = 0;
onComplete?.call();
removeFromParent();
}
}
class MatchAnimation extends Component {
final List matchedPieces;
final int cascadeLevel;
final void Function()? onComplete;
MatchAnimation({
required this.matchedPieces,
this.cascadeLevel = 1,
this.onComplete,
});
@override
Future onLoad() async {
final futures = [];
final random = Random();
for (final piece in matchedPieces) {
final sequence = SequenceEffect([
ScaleEffect.to(
Vector2.all(1.0 + cascadeLevel * 0.1),
EffectController(duration: 0.1, curve: Curves.easeOut),
),
//ParallelEffect([
ScaleEffect.to(
Vector2.zero(),
EffectController(
duration: max(0.1, 0.3 - (cascadeLevel * 0.04)),
curve: Curves.easeIn,
),
),
RotateEffect.by(
(random.nextDouble() - 0.5) * 0.5,
EffectController(duration: 0.2),
),
//]),
]);
final futureOr = piece.add(sequence);
if (futureOr is Future) {
futures.add(futureOr);
}
}
if (futures.isNotEmpty) {
await Future.wait(futures);
}
for (final piece in matchedPieces) {
piece.removeFromParent();
}
onComplete?.call();
removeFromParent();
}
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... -lifecycle