我发现Flame文档示例代码中提供的示例中都使用了
HasGameReference
和findGame()
:
https://github.com/flame-engine/flame/blob/main/doc/flame/examples/lib/router.dart
详情如下:
StartPage
使用 HasGameReference
访问 game
属性。PausePage
同时使用 HasGameReference
和 findGame()
函数。
HasGameReference
和 findGame()
有什么区别?起始页:
class StartPage extends Component with HasGameReference<RouterGame> { 👈👈👈
StartPage() {
addAll([
_logo = TextComponent(
text: 'Your Game',
textRenderer: TextPaint(
style: const TextStyle(
fontSize: 64,
color: Color(0xFFC8FFF5),
fontWeight: FontWeight.w800,
),
),
anchor: Anchor.center,
),
_button1 = RoundedButton(
text: 'Level 1',
action: () => game.router.pushNamed('level1'), 👈👈👈
color: const Color(0xffadde6c),
borderColor: const Color(0xffedffab),
),
...
暂停页面
class PausePage extends Component
with TapCallbacks, HasGameReference<RouterGame> { 👈👈👈
@override
Future<void> onLoad() async {
final game = findGame()!; 👈👈👈
addAll([
...
HasGameReference
mixin 只是 findGame
的缓存版本,使用起来稍微方便一些,因为它在组件中公开了 game
变量,但您可以使用任何您想要的。