我将下面的组件添加到
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();
}
}
热重载仅适用于小部件树中的更改。
由于您的游戏位于
GameWidget
中,如果您不更新(例如,当您进行热重载时 key
中的 GameWidget
),Flutter 无法知道它已更改。
我也遇到了这个问题,并注意到当您将 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 {
...
}
迟到的答案,但是将 GameWidget 包装到 StatelessWidget 中可以使游戏热重载:
class GameWidgetMain extends StatelessWidget {
const GameWidgetMain({
super.key,
});
@override
Widget build(BuildContext context) {
return GameWidget(game: GameMain());
}
}
然后只需将
runApp(const GameWidgetMain())
添加到 main 函数中