颤动火焰拖放

问题描述 投票:0回答:1

我有一个带有 Flame 的 Flutter 应用程序。我需要拖放 SpriteComponents。我还在世界中添加了一个平铺地图,其中每个平铺添加了一个 SpriteComponent(命名单元)。我需要将其他 SpriteComponent 放在 Cell Sprite 组件上,然后让它将拖动的组件添加到 Cell 组件的子组件中。为了找到我要放置的正确单元格组件(在拖动的组件下),我迭代单元格列表及其 x/y 值(在游戏加载期间创建),并检查正在放置的组件的 x 和 Y 值放下并返回拖动组件下的单元格。在 DragEnd 方法中使用 event.canvasPosition.x 和 y 效果很好(我将 event.canvasPosition 存储在 onDragUpdate 方法中)。然而,我必须添加一个相机才能使游戏正确显示,当我这样做时,我无法再从 event.canvasPosition 获得正确的 x/y 坐标。当我拖动组件时,它似乎倾斜了。当我移动时,拖动的组件逐渐远离我的手指,当我放下时,X/Y 也不正确。

如何使用火焰获取对我要滴在其上的单元格的引用?如果有更好的方法来实现这一点,我洗耳恭听。 :)

这是我正在使用的一些代码:

 camera = CameraComponent.withFixedResolution(
        world: world, width: 1280, height: 704);

    camera.moveTo(
        Vector2(level.size.x * 0.5, camera.viewport.virtualSize.y * 0.5));

    add(world);
    add(camera);


@override
  void onDragUpdate(DragUpdateEvent event) {
    final cameraZoom =
        (findGame()!).firstChild<CameraComponent>()!.viewfinder.zoom;
    position += event.delta / cameraZoom;
    position.add(event.delta);
   
    dropX = event.canvasPosition.x;
    dropY = event.canvasPosition.y;

    //Also tried position which didnt work
    //dropX = position.x;
    //dropY = position.y;
  }

  @override
  void onDragEnd(DragEndEvent event) {
    super.onDragEnd(event);

    CellBlock? cb = getDroppedOn(dropX, dropY, this);

    if (cb != null) {
      cb.add(MyComponent);
      parent!.remove(this);
    } else {
      //not a cell
      parent!.remove(this);
    }
  }


flutter drag-and-drop flame
1个回答
0
投票

如果您更新到 Flame v1.11.0(昨天发布),此问题现已解决,并且拖动增量位于正确的坐标空间中。

© www.soinside.com 2019 - 2024. All rights reserved.