【问题标题】:Flutter Flame priority value is not workingFlutter Flame 优先级值不起作用
【发布时间】:2022-09-24 18:36:48
【问题描述】:

我有名为 Obstacle 的 SpriteComponent。我在 super 方法中将优先级值设置为 0。但是 Obstacle 组件是使用 update 方法重新生成的。它在退出屏幕时消失。当它再次发生时,优先值变得无效。我正在分享示例屏幕截图。

first img
second img

玩家留在障碍物后面。 GameOverPanel 总是在后面。

  @override
  Future<void> onLoad() async {
    add(ScreenHitbox());

    add(gameRef.homeBackgroundParallaxComponent);
    add(gameRef.homeBaseParallax);

    add(gameRef.obstacleManager..priority = 0);
    add(gameRef.playerManager..priority = 1);
    add(gameRef.gameOverPanel..priority = 2);
  }

  @override
  void update(double dt) {
    super.update(dt);
    gameRef.obstacleManager.updateObstacle(GameConst.gameSpeed * dt);
    gameRef.playerManager.changePositionDown(value: GameConst.gravity * dt);
  }
  • 游戏结束面板
class GameOverPanel extends Component with HasGameRef<HopyBirdGame> {
  GameOverPanel() : super(priority: 4);

  @override
  Future<void> onLoad() async {
    add(GameOverText());
  }

  @override
  void renderTree(Canvas canvas) {
    if (gameRef.gameOver) {
      super.renderTree(canvas);
    }
  }
}

class GameOverText extends SpriteComponent with HasGameRef<HopyBirdGame> {
  GameOverText() : super(size: Vector2(300, 80), anchor: Anchor.center);

  @override
  Future<void>? onLoad() async {
    sprite = await gameRef.loadSprite(Assets.gameOver.path);
    position = Vector2(gameRef.screenWidth / 2, gameRef.screenHeight / 2);
    return super.onLoad();
  }
}

    标签: flutter dart game-development flame


    【解决方案1】:

    我猜(因为ObstacleManager 的代码不存在)您正在将障碍直接添加到游戏中,从ObstacleManager 到组件树并且您没有将priority 添加到实际的Obstacle 组件。

    如果不是这种情况,请使用ObstacleManager 的代码更新问题。

    【讨论】:

      猜你喜欢
      • 2021-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-06
      • 2017-11-18
      • 1970-01-01
      • 2011-12-06
      • 2018-09-01
      相关资源
      最近更新 更多