#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. Извините, я написал это неясно, сейчас обновил текст.