Изучение DrawSizePreservingFillContainer в osu! Структура: комплексное руководство

В этой статье блога мы углубимся в DrawSizePreservingFillContainer в osu! Framework и изучите различные методы его эффективного использования при разработке пользовательского интерфейса. Этот контейнер играет решающую роль в управлении и сохранении размера элементов пользовательского интерфейса, обеспечивая удобство взаимодействия с пользователем. Мы продемонстрируем несколько примеров кода, чтобы продемонстрировать, как использовать эту функцию в ваших проектах.

Метод 1: базовое использование
DrawSizePreservingFillContainer обычно используется для хранения элементов пользовательского интерфейса, которым необходимо сохранять соотношение сторон при адаптации к различным размерам экрана. Вот простой пример:

using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osuTK;
public class MyDrawable : CompositeDrawable
{
    public MyDrawable()
    {
        RelativeSizeAxes = Axes.Both;
        AddRangeInternal(new Drawable[]
        {
            new DrawSizePreservingFillContainer
            {
                Child = new SpriteText
                {
                    Text = "Hello, osu! Framework!",
                    Anchor = Anchor.Centre,
                    Origin = Anchor.Centre,
                },
                TargetDrawSize = new Vector2(1920, 1080),
            }
        });
    }
}

Метод 2: управление масштабированием
Иногда вам может потребоваться управлять масштабированием на основе определенной оси. Вот пример, демонстрирующий, как этого добиться:

using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osuTK;
public class MyDrawable : CompositeDrawable
{
    public MyDrawable()
    {
        RelativeSizeAxes = Axes.Both;
        AddRangeInternal(new Drawable[]
        {
            new DrawSizePreservingFillContainer
            {
                Child = new SpriteText
                {
                    Text = "Hello, osu! Framework!",
                    Anchor = Anchor.Centre,
                    Origin = Anchor.Centre,
                },
                TargetDrawSize = new Vector2(1920, 1080),
                ScaleAxes = Axes.Y, // Scale only on the Y-axis
            }
        });
    }
}

Метод 3: настройка соотношения сторон
В некоторых случаях вам может потребоваться настроить соотношение сторон контейнера. Вот пример, демонстрирующий, как этого добиться:

using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osuTK;
public class MyDrawable : CompositeDrawable
{
    public MyDrawable()
    {
        RelativeSizeAxes = Axes.Both;
        AddRangeInternal(new Drawable[]
        {
            new DrawSizePreservingFillContainer
            {
                Child = new SpriteText
                {
                    Text = "Hello, osu! Framework!",
                    Anchor = Anchor.Centre,
                    Origin = Anchor.Centre,
                },
                TargetDrawSize = new Vector2(1920, 1080),
                CustomAspectRatio = 16 / 9f, // Custom aspect ratio (16:9)
            }
        });
    }
}

Контейнер DrawSizePreservingFillContainer в osu! Framework — мощный инструмент для управления и сохранения размера элементов пользовательского интерфейса. Используя методы, продемонстрированные в этой статье, вы можете гарантировать, что ваш пользовательский интерфейс легко адаптируется к экранам разных размеров, сохраняя при этом желаемое соотношение сторон. Поэкспериментируйте с этими примерами кода и откройте для себя универсальность этого контейнера в своих проектах.