【问题标题】:Flutter update is giving me this error: The method '*' was called on null颤振更新给了我这个错误:方法'*'被调用为空
【发布时间】:2020-07-31 14:29:50
【问题描述】:

我有一个使用 flame 库的颤振应用程序。我试图让一个物体在颤动游戏中移动。当我运行update 函数时,我收到以下错误:

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

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

游戏控制器类

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);
  }
}

【问题讨论】:

    标签: flutter dart flame


    【解决方案1】:

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

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

      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);
      }
    

    【讨论】:

      猜你喜欢
      • 2020-04-21
      • 2021-04-06
      • 2021-06-29
      • 1970-01-01
      • 2020-08-07
      • 2019-12-14
      • 2020-10-15
      • 2021-07-02
      • 2021-09-17
      相关资源
      最近更新 更多