【问题标题】:error: Non-nullable instance field 'screenSize' must be initialized错误:必须初始化不可为空的实例字段“screenSize”
【发布时间】:2021-08-10 02:42:53
【问题描述】:

我对火焰和颤动还很陌生,但我只是想为我正在开发的游戏项目建立基础,它告诉我“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) {
  }
}

【问题讨论】:

    标签: flutter dart game-engine flame


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      (我没有使用过 Flame,但这只是 Dart 特有的关于你可以做什么的观点)

      你有两个选择:

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

      我不知道你想做什么,但最初将它们设置为第二个选项可能是一个好习惯。

      【讨论】:

        猜你喜欢
        • 2021-07-06
        • 1970-01-01
        • 1970-01-01
        • 2022-08-18
        • 2021-09-14
        • 2021-09-24
        • 2021-10-11
        • 2021-08-27
        • 2022-01-25
        相关资源
        最近更新 更多