使用 Flame Engine 调整屏幕大小的问题

Issue with screen resize using Flame Engine

我正在尝试在我的 flutter 网站中直接嵌入一个使用 Flame Engine 的小游戏。

我已经成功创建了一个包含 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 以在游戏中调整大小之前获取玩家位置 class 但玩家位置在调用时已设置为 [0,0]。

我看了几个教程,但我不知道如何绕过这个问题。

从这里开始的任何想法。

这是因为您是在 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 做出反应 class。