问题描述
我对火焰和颤振非常陌生,但我只是想为我正在处理的游戏项目建立基础,它告诉我字段“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
而不是 Game
。
BaseGame
将为您提供游戏引擎所需的一切,同时 Game
您必须自己实现一切。
您可以查看一个基本示例 here,https://examples.flame-engine.org/ 上还有更多示例
YouTube 上也有一些不错的教程。
Flawn 的回答对于必须初始化的值也是正确的,但在 BaseGame
中,您将自动拥有屏幕的 size
。
(我没有与 Flame 合作过,但这只是 Dart 对您可以做什么的特定看法)
您有两个选择:
- 将
screenSize
和tileSize
的类型设置为可空,类型为Size?
和double
- 为两个变量设置初始值(硬编码或构造函数)
我不知道您想做什么,但最好先将它们设置为第二个选项。