Util 工具类
Position
在构建游戏所需的各种模块中,Dart和Flutter都有一些不同的类来处理二维双点概念。API中特别常见的是math.Point和ui.Offset。
Position类是一个帮助与这些类轻松转换的实用工具类。
它也有别于这些提供类的默认实现(math.Point和ui.Offset),因为它是可变的,并且提供了一些有用的操作方法。
Util 类
这个类,可以通过Flame访问。这个雷包含相互独立、很好使用的稀疏函数。
建议通过Flame.util getter调用此类中的函数,以利用Flame引擎准备的单个实例。
Flame.util.fullScrren()
调用时,这将禁用所有的SystemUiOverlay,是应用程序全屏。挡在main函数中调用时,让你的应用程序全屏(没有顶部和底部栏)
Flame.util.setLanscape()
这个方法设置整个应用程序的方向(有效地,包括游戏)为横屏,依赖于操作系统和设备设置,应该允许左和右横屏方向。为了设置应用方向为特定方向的横屏,使用Flame.util.setLandscapeLeftOnly或者Flame.util.setLandscapeRightOnly。
Flame.util.setPortrait()
这个方法设置整个应用程序的方向(有效的,包括游戏)为竖屏,依赖于操作系统和设备设置,应用允许上和下竖屏方向。为了设置应用为特定方向的竖屏,使用Flame.util.setPortraitUpOnly或者Flame.util.setPortraitDownOnly。
Flame.util.setOrientation()和Flame.util.setOrientations()
如果需要在允许的方向上更好的控制(不需要直接处理SystemChrome),可以使用setOrientation(接收一个单一的DeviceOrientation作为参数),setOrientations(接收一个List 作为可能的方向)。
**注意:**首先在异步主系统中调用这个方法,等待其值以避免在为生产而构建时影响具体设备的大小错误。
Flame.util.addGestureRecognizer()和Flame.util.removeGestureRecognizer
这两个函数帮助注册(取消注册)手势识别,这样游戏就能允许输入了。关于这两个函数在这里.
其他函数
- text: 这里
- drawWhere:非常简单的函数,手动将偏移值应用于
Canvas上。渲染通过函数提供的内容,然后重置画布,而不使用画布内置的save/restore函数。这可能非常有用,因为BaseGame使用画布的状态,你不应该弄混它。
Timer 定时器
Flame提供了一个简单的使用程序类,可帮助你处理倒计时和类似事件的事件。
倒计时例子:
import 'dart:ui';
import 'package:flame/game.dart';
import 'package:flame/position.dart';
import 'package:flame/text_confgi.dart';
import 'package:flame/time.dart';
class MyGame extends Game {
final TextConfig textConfig = TextConfig(color: const Color(0xFFFFFFFF));
final countdown = Timer(2);
MyGame() {
countdown.start();
}
@override
void update(double dt) {
countdown.update(dt);
if(countdown.isFinished()) {
// do something ...
}
}
@override
void render(Canvas canvas) {
textConfig.render(canvas, "Countdown: ${countdown.current.toString()}",Position(10, 100);
}
}
间隔例子:
import 'dart:ui';
import 'package:flame/game.dart';
import 'package:flame/position.dart';
import 'package:flame/text_config.dart';
import 'package:flame/time.dart';
class MyGame extends Game {
final TextConfig textConfig = TextConfig(color: const Color(0xFFFFFFFF));
Timer interval;
int elapsedSecs = 0;
MyGame() {
interval = Timer(1, repeat: true, callback: () {
elapsedSecs += 1;
});
interval.start();
}
@override
void update(double dt) {
interval.update(dt);
}
@override
void render(Canvas canvas) {
textConfig.render(canvas, "Elapsed time: $elapsedSecs", Position(10, 150));
}
}
定时器实例也可以在BaseGame游戏内部通通过TimerComponent使用。
Timer Component
import 'package:flame/time.dart';
import 'package:flame/components/timer_component.dart';
import 'package:flame/game.dart';
class MyBaseGame extends BaseGame {
MyBaseGaem() {
add(
TimerComponent(
Timer(10, repeat: true, callback: () {
print("10 seconds elapsed");
}
)
..start()
);
}
}