Flame onLoad 与构造函数初始化

Flame onLoad vs constructor initialization

如果我像这样在 Flame 中创建一个组件:

class MyComponent extends PositionComponent {
  MyComponent() {
    // Option 1
  }

  @override
  Future<void> onLoad() {
    // Option 2
  }
}

如果我在构造函数(选项 1)或 onLoad 方法(选项 2)中初始化我的组件有什么区别?

如果在将组件添加到游戏之前需要加载一些东西,例如图像,那么您需要在 onLoad 中进行加载,以便游戏知道它不应该加载'在加载所有内容之前,不要将您的组件添加到游戏中。例如:

class MyComponent extends PositionComponent {
  @override
  Future<void> onLoad() async {
    final sprite = await loadSprite('flame.png');
  }
}

因此,为了使您的代码保持一致,您可以在 onLoad 中进行所有初始化,即使您的所有组件都不需要它。

关于 onLoad 的另一件好事是,如果您使用 HasGameRef mixin,gameRef 将设置为您在 onLoad 中的组件,但不会在构造函数中。