0

我正在尝试直接在我的颤振网站中嵌入一个使用火焰引擎的小游戏。

我设法创建了一个包含以下内容的容器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 以在 Game 类中调整大小之前获取玩家位置,但在调用它时玩家位置已经设​​置为 [0,0]。

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

从这里去哪里的任何想法。

4

1 回答 1

0

这是因为您在 内启动游戏GameWidget,如果您在小部件之外启动它应该没问题。颤振小部件树是在调整大小时重建的,这就是您面临这个问题的原因。

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游戏类内部做出反应,具体取决于您构建游戏的方式。

于 2021-11-19T15:49:11.427 回答