使用 CameraComponent 时 Tappables 丢失

Tappables miss when using CameraComponent

我按照 Flame 网站上的文档创建了一个 Klondike 游戏骨架,现在正尝试将相同的想法应用于创建棋盘游戏。我喜欢使用 CameraComponent,因为它允许随着浏览器大小的变化轻松调整游戏区域的大小,但我发现当与 Tappable Components 混合使用时,点击事件往往会“错过”,或者与屏幕上可见的内容不一致.这是一个最小的例子:

import 'package:flame/components.dart';
import 'package:flame/experimental.dart';
import 'package:flame/game.dart';
import 'package:flame/input.dart';
import 'package:flutter/material.dart';

void main() {
  final game = MyFlameGame();
  runApp(GameWidget(game: game));
}

class MyFlameGame extends FlameGame with HasTappables {
  @override
  Future<void> onLoad() async {
    final myComponent = MyComponent()
      ..size = Vector2(50, 50)
      ..position = Vector2(250, 250);

    final world = World();
    world.add(myComponent);
    add(world);

    final camera = CameraComponent(world: world)
      ..viewfinder.visibleGameSize = Vector2(1000, 1000)
      ..viewfinder.position = Vector2(500, 0)
      ..viewfinder.anchor = Anchor.topCenter;
    add(camera);
  }
}

class MyComponent extends PositionComponent with Tappable {
  @override
  bool get debugMode => true;

  @override
  bool onTapUp(TapUpInfo info) {
    print('tap up');
    return true;
  }

  @override
  bool onTapDown(TapDownInfo info) {
    print('tap down');
    return true;
  }
}

如果您调整 window 的大小并在框内单击,我希望看到控制台日志,但它们有时不会出现。有时我能够在黑色区域找到真正的 Tappable 位置,这将触发控制台消息。有没有办法配置 Tappable 组件以与通过 CameraComponent 视口可见的内容对齐?

这是 CameraComponent 中的已知错误,或者可能不是错误,只是尚未实现。这就是 CameraComponent 仍然被归类为 experimental 的原因之一。

这项工作仍在进行中,您可以通过关注 this issue.

获取最新信息