error: Non-nullable instance field 'screenSize' must be initialized

error: Non-nullable instance field 'screenSize' must be initialized

我对 flame 和 flutter 还很陌生,但我只是想为我正在进行的游戏项目建立基础,它告诉我字段“screenSize”以及“tileSize”,必须初始化。

import 'dart:ui';

import 'package:flame/flame.dart';
import 'package:flame/game.dart';
import 'package:flutter/cupertino.dart';

class GameController extends Game {
  Size screenSize;
  double tileSize;

  GameController() {
    initialize();
  }

  void initialize() async {
    resize(await Flame.util.initialDimensions());
  }

  @override
  void render(Canvas canvas) {
    Rect background = Rect.fromLTWH(0, 0, screenSize.width, screenSize.height);
    Paint backgroundPaint = Paint()..color = Color(0xFFFAFAFA);
    canvas.drawRect(background, backgroundPaint);
  }

  @override
  void update(double t) {}

  void resize(Size size) {
    screenSize = size;
    tileSize = screenSize.width / 10;
  }

  void onTapDown(TapDownDetails d) {
  }
}

如果您是 Flame 的新手,请扩展 BaseGame 而不是 GameBaseGame 将为您提供游戏引擎所需的一切,同时 Game 您必须自己实现所有内容。

你可以查看一个基本示例here, and there are some more examples on https://examples.flame-engine.org/

YouTube 上也有一些很好的教程。

Flawn 关于必须初始化的值的回答是正确的,但在 BaseGame 中你会自动拥有屏幕的 size

(我没有使用过 Flame,但这只是关于您可以做什么的特定于 Dart 的视图)

您有两个选择:

  1. 设置screenSizetileSize的类型可为空,则类型为Size?double
  2. 为两个变量设置初始值(硬编码或通过构造函数)

我不知道你想做什么,但最好先将它们设置为第二个选项。