0

将生成的图像放入 Flame.Images资产缓存的最有效方法是什么?

我可以从这个方法中获取图像,但我不知道如何将生成的Image对象放入缓存中。

Future<Image> decodeImageFromPixels(
    Uint8List pixels,
    int width,
    int height, {
    bool runAsWeb = kIsWeb,
  })
4

1 回答 1

0

这目前不起作用,因为图像缓存仅适用于文件。但是你可以很容易地在你的游戏类中创建一个图像缓存(只是一个地图),可以是静态地图,也可以是你可以通过具有HasGameRef<YourGameClassmixin 的组件访问的地图。

它看起来像这样:

class MyGame extends FlameGame {
  final generatedImages = <String, Image>{};

  @override
  Future<void> onLoad() async {
    await super.onLoad();
    final image = await Flame.images.decodeImageFromPixels(...);
    generatedImages['image name'] = image;
  }
}

然后在您想要使用图像的组件类中,如果它是SpriteComponent例如:

class MyComponent extends Component with HasGameRef<MyGame> {
  @override
  Future<void> onLoad() async {
    await super.onLoad();
    sprite = Sprite(gameRef.generatedImages['image name']);
  }
}

或者,如果您没有扩展组件,但仍然使用 aSpriteComponent您可以在任何您想要该组件的地方执行此操作(可以访问gameRef):

final spriteComponent = SpriteComponent.fromImage(gameRef.generatedImages['image name']);

请注意,您也可以将generatedImages地图设为静态,并在MyGame.generatedImages['image name'];没有gameRef.

于 2021-12-12T12:38:06.220 回答