在开头,我们知道在一个游戏应用中,游戏是在游戏主循环里面运行的。Flame插件已经提供了可以直接使用的游戏主循环脚手架,要使用这个脚手架,就要用到Flame的游戏(Game)抽象类。
创建一个名称为box-game.dart的新文件,然后开始编写BoxGame类,。
import 'dart:ui';
import 'package:flame/game.dart';
class BoxGame extends Game {
void render(Canvas canvas) {
// TODO: 实现渲染
}
void update(double t) {
// TODO: 实现更新
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
上面的代码中,导入dart:ui库,这样的话,等一下我们就可以使用画布(Canvas)类和大小(Size)类。然后导入package:flame/game.dart库,这个库里面包括我们现在使用的游戏(Game)抽象类,这个类有两个方法:更新(update)和渲染(render),我们直接用同名方法覆盖了它们。
在Dart 2.x版本中,@override注释和new关键字是可选的,所以在这里也不需要写。
接下来,我们在main.dart文件中创建BoxGame类的实例,并将其widget属性传递给runApp函数。同时,引用我们刚才创建的package:hello_flame/box-game.dart,让BoxGame类可以在main.dart中使用。
...
import 'package:hello_flame/box-game.dart';
void main() async {
...
BoxGame game = BoxGame();
runApp(game.widget);
1
2
3
4
5
6
7
到这里为止,我们的main.dart里面应该有以下代码。
import 'package:flutter/material.dart';
import 'package:flame/util.dart';
import 'package:flutter/services.dart';
import 'package:hello_flame/box-game.dart';
void main() async {
Util flameUtil = Util();
await flameUtil.fullScreen();
await flameUtil.setOrientation(DeviceOrientation.portraitUp);
BoxGame game = BoxGame();
runApp(game.widget);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
现在我们的应用程序可以被称为游戏了,运行游戏,会显示一个空白的黑屏,因为我们还没有在屏幕上绘制具体的内容。