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()
);
}
}
複製程式碼