为什么Flame游戏引擎热重载不起作用?

问题描述 投票:0回答:3

我将下面的组件添加到

FlameGame
类中,每当我更改此组件时,我都必须热启动应用程序。有解决方法吗?

class SoldierSprite extends SpriteAnimationComponent {
  @override
  Future<void>? onLoad() async {

    var miniSprites =
        await TexturePackerLoader.fromJSONAtlas('mini.png', 'mini.json');

    var miniSpriteComponent = SpriteComponent()
      ..sprite = miniSprites[4]
      ..size = Vector2(100, 200)
      ..position += Vector2(200, 200)
      ..angle = -95;

    add(miniSpriteComponent);

    return super.onLoad();
  }
}
flutter flame
3个回答
1
投票

热重载仅适用于小部件树中的更改。

由于您的游戏位于

GameWidget
中,如果您不更新(例如,当您进行热重载时
key
中的
GameWidget
),Flutter 无法知道它已更改。


0
投票

我也遇到了这个问题,并注意到当您将 GameWidget 包装在非 GameWidget 中时,热重载 确实有效 ,例如:

class MyPage extends StatelessWidget {
  const MyPage({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('New Game'),
      ),
      body: GameWidget(
        game: MyGame(),
      ),
    );
  }
}

哪里

MyGame

class MyGame extends FlameGame {
  ...
}

0
投票

迟到的答案,但是将 GameWidget 包装到 StatelessWidget 中可以使游戏热重载:

class GameWidgetMain extends StatelessWidget {
  const GameWidgetMain({
    super.key,
  });

  @override
  Widget build(BuildContext context) {
    return GameWidget(game: GameMain());
  }
}

然后只需将

runApp(const GameWidgetMain())
添加到 main 函数中

© www.soinside.com 2019 - 2024. All rights reserved.