如何在Flutter Flame Engine中定位SpriteComponent相对于游戏屏幕的位置?

yzxexxkh  于 2023-11-21  发布在  Flutter
关注(0)|答案(1)|浏览(182)

我有一个精灵组件,我想设置为火焰游戏的主背景,并在此之上移动一个头像,CameraComponent跟随这个头像。精灵需要支持的移动是上下左右。因为我需要支持所有这些移动方向,我不能只依赖ParallaxComponent,这似乎是一个很好的选择,横向滚动游戏。
我遇到的问题是精灵背景的放置。如果我使用camera.backdrop设置它,camera.follow(avatar)不会移动相机。以下是我在onLoad()方法中尝试的相关代码:

@override
  Future<void> onLoad() async {
    super.onLoad();
    _avatar.position = size / 2;

    //camera.backdrop = _map;
    camera.viewport = FixedSizeViewport(size.x, size.y);
    camera
          //..viewfinder.visibleGameSize = Vector2(100, 100)
          ..follow(_avatar)
        // ..setBounds(
        //     //Rectangle.fromCenter(center: _map.absoluteCenter, size: _map.size / 2),
        //     Rectangle.fromLTRB(0, 0, _map.size.x, _map.size.y))
        ;

    //_map.position = Vector2(-size.x, -size.y);

    await world.add(_map);
    //var parallax = GameParallaxComponent();

    //parallax.isFullscreen = true;
    //await world.add(parallax);
    //await world.add(SpriteComponent(size: _map.size));

    await world.add(_avatar);
    //world.
    //add(world);
    addWorldCollision();
    // (await MapLoader.readWorldCollisionMap()).forEach((rect) {
    //   initializeCollisionDetection(
    //     mapDimensions: rect,
    //     minimumDistance: 10,
    //   );
    // });

    //camera.viewport = MaxViewport();

    // camera.followComponent(_avatar,
    //     worldBounds: Rect.fromLTRB(0, 0, _world.size.x, _world.size.y));
    //await add(cameraComp);
    //camera.canSee(_avatar);

    //await add(camera);
    //camera.viewfinder.position = _avatar.position;
    //camera.viewport.position = _avatar.position;
  }

字符串
我尝试将camera.backdrop设置为背景精灵组件(_map);但它不允许camera随_avatar移动。我可以像这样设置此背景精灵组件的位置- _map.position = Vector 2(-size.x,-size.y);但是,这会在背景周围绘制一个黑色边框。我试图通过以下方式定义要控制的摄影机视口- camera.viewport = FixedSizeViewport(size.x,size.y);然而,这似乎并没有改变黑色边框。
下面是我的游戏如何使用上面的代码渲染的图像。x1c 0d1x
当我们需要相机跟随一个可以在这个背景上向任何方向移动的化身时,什么是为基于火焰的游戏设置背景图像的最佳方法?

pobjuy32

pobjuy321#

将背景作为第一个组件添加到您的world中,然后将玩家也添加到世界中,然后您可以在玩家在世界中移动时让相机跟随玩家。(您也可以将背景的priority设置为低于玩家的优先级)
您可以使用camera.setBounds设置相机的边界。设置边界以匹配背景在您的世界中的位置。
camera.backdrop是为了有一个静态的背景,而你在世界各地移动,这就是为什么该解决方案不适合你。

相关问题