我有一个带有 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);
}
}
如果您更新到 Flame v1.11.0(昨天发布),此问题现已解决,并且拖动增量位于正确的坐标空间中。