flutter - Flutter更新给我这个错误:在空调用方法 '*'

标签 flutter dart flame

我有一个使用flame库的flutter应用程序。我正在尝试使对象在 flutter 打游戏中移动。当我运行update函数时,出现以下错误:

The method '*' was called on null.
Receiver: null
Tried calling: *(0.0)

似乎未初始化某些东西,并且在初始化某些东西之前运行了update函数。当我注释掉player.update(t)时,它可以工作,但不会调用update函数。我在做错广告时该怎么解决?这是我的代码:

游戏 Controller 类
class GameController extends Game {
  Size screenSize;
  Player player;

  GameController() {
    initialize();
  }

  void initialize() async {
    final initDimetion = await Flame.util.initialDimensions();
    resize(initDimetion);
    player = Player(this);
  }

  void render(Canvas c) {
    Rect bgRect = Rect.fromLTWH(0, 0, screenSize.width, screenSize.height);
    Paint bgPaint = Paint()..color = Color(0xFFFAFAFA);
    c.drawRect(bgRect, bgPaint);

    player.render(c);
  }

  void update(double t) {
    if (player is Player) { // Tried adding this if statement but it didn't work
      player.update(t);
    }
  }

  void resize(Size size) {
    screenSize = size;
  }
}

球员职业
class Player {
  final GameController gameController;
  Rect playerRect;
  double speed;

  Player(this.gameController) {
    final size = 40.0;

    playerRect = Rect.fromLTWH(gameController.screenSize.width / 2 - size / 2,
        gameController.screenSize.height / 2 - size / 2, size, size);
  }

  void render(Canvas c) {
    Paint color = Paint()..color = Color(0xFF0000FF);
    c.drawRect(playerRect, color);
  }

  void update(double t) {
    double stepDistance = speed * t;
    Offset stepToSide = Offset.fromDirection(90, stepDistance);
    playerRect = playerRect.shift(stepToSide);
  }
}

最佳答案

您永远不会将Player的speed属性初始化为一个值。因此Player.update中的speed * t会导致此错误。

只需在构造函数中初始化speed属性

  Player(this.gameController) {
    final size = 40.0;
    this.speed = 0;
    playerRect = Rect.fromLTWH(gameController.screenSize.width / 2 - size / 2,
        gameController.screenSize.height / 2 - size / 2, size, size);
  }

关于flutter - Flutter更新给我这个错误:在空调用方法 '*',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61282624/

相关文章:

firebase - 如何在一个流中合并多个流

dart - String.replaceAllMapped 具有异步结果

sqlite - SELECT MAX(id)的结果为null

flutter - 错误: The argument type 'List<String>' can't be assigned to the parameter type 'String'

flutter - 有没有办法在 flutter 中创建索引堆栈之间的转换

firebase - 表单字段输入的 Flutter firebase 验证

flutter - 如何从 Dart 中的流中调用流

flutter 火焰 : how to use parallax with camera. followComponent?

flutter - 如何为图像添加透明度

flutter - 你应该如何进行矩阵变换?