You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flame引擎效果逻辑正常但Redmi Android10设备无视觉更新问题排查求助

Flame引擎效果逻辑正常但Redmi Android10设备无视觉更新问题排查求助

各位Flame/Flutter开发者好,我遇到了一个非常诡异的设备特定问题,折腾了好几天都没解决,想请大家帮忙分析下可能的原因:

问题详细描述

我开发的Flame游戏中,所有动画效果的逻辑完全正常,但在我的Redmi Android 10设备上,视觉上完全看不到任何效果的进度更新——比如MoveToEffect本应驱动精灵组件移动,但实际位置纹丝不动;不过动画的生命周期却完全正常走完(onComplete回调触发,日志也能确认效果的Future已完成)。

具体的事件链已经通过日志100%验证:

  1. GameBloc的_onSwapPieces方法创建SwapAnimation组件,通过状态管理emit一个GameUpdated状态
  2. 游戏核心Game类监听状态变化,成功调用game.add(swapAnimation)将动画组件加入游戏树
  3. SwapAnimation的onLoad方法被正常调用,并且成功将MoveToEffect、RotateEffect等效果添加到目标游戏碎片组件
  4. 动画内部的Future完全执行完毕,onComplete回调也按时触发,说明效果的逻辑生命周期完整,但视觉上没有任何变化

已尝试的无效解决手段

我几乎把能想到的环境和代码问题都排查了一遍,但问题依然顽固存在:

  • 全链路日志打印确认:游戏逻辑、状态同步、组件添加/移除的每一步都在正确执行
  • 修复了所有状态同步类bug(比如“幽灵碎片”这类残留组件已被正确清理)
  • 彻底清理开发环境:执行flutter clean、删除pubspec.lock、flutter pub cache repair
  • 完全重装Flutter SDK到最新稳定版3.32.2
  • 重装VS Code中的Dart/Flutter扩展
  • 新建一个极简测试项目复现问题,结果依然一致
  • flutter doctor -v输出全绿,没有任何警告或错误
  • 项目依赖的Flame版本为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<void> onLoad() async {
    final initialPosition1 = piece1.position.clone();
    final initialPosition2 = piece2.position.clone();
    final futures = <Future>[];

    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<PetalPiece> matchedPieces;
  final int cascadeLevel;
  final void Function()? onComplete;

  MatchAnimation({
    required this.matchedPieces,
    this.cascadeLevel = 1,
    this.onComplete,
  });

  @override
  Future<void> onLoad() async {
    final futures = <Future>[];
    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),
        ),
        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();
  }
}

核心疑问

既然所有逻辑都被验证为正确执行,什么原因会导致Flame引擎在特定的Redmi Android 10设备上,无法视觉更新动画效果的进度? 有没有可能是设备的渲染特性、Flame在Android 10上的兼容问题,或者我忽略了某个Flame的关键配置?

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 09:59:33