错误:必须初始化不可为空的实例字段“screenSize”

问题描述

我对火焰和颤振非常陌生,但我只是想为我正在处理的游戏项目建立基础,它告诉我字段“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,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 您必须自己实现一切。

您可以查看一个基本示例 herehttps://examples.flame-engine.org/ 上还有更多示例

YouTube 上也有一些不错的教程。

Flawn 的回答对于必须初始化的值也是正确的,但在 BaseGame 中,您将自动拥有屏幕的 size

,

(我没有与 Flame 合作过,但这只是 Dart 对您可以做什么的特定看法)

您有两个选择:

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

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