我正在尝试直接在我的flutter网站上嵌入一个使用火焰引擎的小游戏。
我已经设法创建了一个容器,其中包含GameWidget
class gameContainer extends StatelessWidget {
const gameContainer({Key? key, required this.width}) : super(key: key);
final double width;
@override
Widget build(BuildContext context) {
return Container(
width: width,
height: 100,
padding: EdgeInsets.symmetric(horizontal: 40, vertical: 10),
child: GameWidget(game: game()),
);
}
}我已经运行了游戏,在屏幕上显示了一个玩家并在移动。
我的宽度是动态的,我希望能够调整屏幕的大小和GameViewport来调整自己的大小。问题是,当屏幕调整自己的大小时,整个游戏就会重置。onGameResize和onLoad都被称为:最终结果我失去了我的球员位置。
它试图在游戏类中调整大小之前覆盖onGameResize以获取玩家位置,但在调用它时玩家位置已经设置为0,0。
我已经看了几个教程,但我不知道如何通过这个问题去哪里。
任何从这里开始的想法。
发布于 2021-11-19 15:49:11
这是因为您是在GameWidget内部启动游戏的,如果您在小部件外部启动它,则应该没问题。flutter窗口小部件树是在调整大小时重新构建的,这就是您面临这个问题的原因。
class gameContainer extends StatelessWidget {
const gameContainer({Key? key, required this.width}) : super(key: key);
final double width;
final FlameGame _game = game();
@override
Widget build(BuildContext context) {
return Container(
width: width,
height: 100,
padding: EdgeInsets.symmetric(horizontal: 40, vertical: 10),
child: GameWidget(game: _game),
);
}
}请记住,根据构建游戏的方式,您可能必须在游戏类中对onGameResize做出反应。
https://stackoverflow.com/questions/70037153
复制相似问题