Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振更新给了我这个错误:方法'*';被调用为空_Flutter_Dart_Flame - Fatal编程技术网

Flutter 颤振更新给了我这个错误:方法'*';被调用为空

Flutter 颤振更新给了我这个错误:方法'*';被调用为空,flutter,dart,flame,Flutter,Dart,Flame,我有一个使用flame库的flatter应用程序。我想让一个物体在颤振游戏中移动。运行update函数时,出现以下错误: The method '*' was called on null. Receiver: null Tried calling: *(0.0) 似乎有些东西没有初始化,而update函数是在初始化之前运行的。当我注释出player.update(t)时,它可以工作,但不会调用update函数。我做错了什么?我怎样才能修复它?这是我的密码: 游戏控制器类 class Game

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

The method '*' was called on null.
Receiver: null
Tried calling: *(0.0)
似乎有些东西没有初始化,而
update
函数是在初始化之前运行的。当我注释出player.update(t)时,它可以工作,但不会调用update函数。我做错了什么?我怎样才能修复它?这是我的密码:

游戏控制器类

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