Эффекты пламени, не работающие визуально, несмотря на правильную логику и жизненный цикл компонентовAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Эффекты пламени, не работающие визуально, несмотря на правильную логику и жизненный цикл компонентов

Сообщение Anonymous »

У меня есть полностью рабочая петля логика игры, где компонент эффекта (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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»