Изменение размера мира в flame с параллаксом

#flutter #viewport #flame

#flutter #окно просмотра #пламя

Вопрос:

Я использую версию Flame версии 1 и добавляю параллакс-фон, который отлично работает.

 // load background layers
final layers = _layersMeta.entries.map(
      (e) => loadParallaxLayer(
    ParallaxImageData(e.key),
    velocityMultiplier: Vector2(e.value.toDouble(), 1.0),
        alignment: Alignment.center,
        fill: LayerFill.none ,
      ),
);

// create background parallax
parallax = ParallaxComponent(
  parallax: Parallax(
    await Future.wait(layers),
    baseVelocity: Vector2(20, 0),
  ),
);

add(parallax);
 

Как только я настроил камеру на следование за спрайтом camera.followVector2(player.position); , очевидно, что параллакс был инициализирован размером экрана, потому что при перемещении камеры края параллакса становятся видимыми на черном фоне игрового мира. Я пробовал изменять размер ParallaxComponent и Parallax то и другое, но безрезультатно.

Изменение размера холста тоже мало что дает onGameResize(Vector2(camera.canvasSize.x, 5000));

Существует ли стандартный способ установки компонента, заполняющего мировой размер? В исходном коде говорится о размере мира, но я не вижу никакого способа контролировать его.

Ответ №1:

Это ParallaxComponent a PositionComponent , который живет в мире, который камера просматривает по умолчанию. Если вы хотите, чтобы a PositionComponent было относительно окна просмотра (или GameWidget ), вы должны изменить его positionType на PositionType.viewport .

Таким образом, в этом случае инициализация вашего ParallaxComponent может выглядеть следующим образом, чтобы заставить его игнорировать камеру:

 // create background parallax
parallax = ParallaxComponent(
  parallax: Parallax(
    await Future.wait(layers),
    baseVelocity: Vector2(20, 0),
  ),
)..positionType = PositionType.viewport;
 

Комментарии:

1. Странно, по умолчанию он не следовал за камерой. Однако, когда я устанавливаю его в positionType.widget, он следует за камерой. Тип позиции — это то, чего мне не хватало, спасибо.

2. Извините, я написал это неясно, сейчас обновил текст.