🇷🇺 Русский (Russian)
🇷🇺 Русский (Russian)
Внешний вид
🇷🇺 Русский (Russian)
🇷🇺 Русский (Russian)
Внешний вид
This page is written for:
1.21
This page is written for:
1.21
На этой странице предполагается, что вы ознакомились со страницей Основные концепции рендеринга.
Класс DrawContext
является основным классом, используемым для рендеринга в игре. Он используется для рендеринга фигур, текста и текстур, а так же, как было показано ранее, для управления MatrixStack
и использования BufferBuilder
.
Класс DrawContext
можно использовать для простого рисования квадратных фигур. Если вы хотите нарисовать треугольники или любую другую неквадратную фигуру, вам понадобится BufferBuilder
.
Для рисования закрашенного прямоугольника можно использовать метод DrawContext.fill(...)
.
int rectangleX = 10;
int rectangleY = 10;
int rectangleWidth = 100;
int rectangleHeight = 50;
// x1, y1, x2, y2, color
context.fill(rectangleX, rectangleY, rectangleX + rectangleWidth, rectangleY + rectangleHeight, 0xFF0000FF);
Допустим, мы хотим обвести только что нарисованный прямоугольник. Мы можем использовать метод DrawContext.drawBorder(...)
, чтобы нарисовать контур.
// x, y, width, height, color
context.drawBorder(rectangleX, rectangleY, rectangleWidth, rectangleHeight, 0xFFFF0000);
Для рисования линий мы можем использовать методы DrawContext.drawHorizontalLine(...)
и DrawContext.drawVerticalLine(...)
.
// Let's split the rectangle in half using a green line.
// x, y1, y2, color
context.drawVerticalLine(rectangleX + rectangleWidth / 2, rectangleY, rectangleY + rectangleHeight, 0xFF00FF00);
Класс DrawContext
имеет встроенный менеджер ножниц. Это позволяет вам легко привязать визуализацию к определенной области. Это полезно для отображения таких вещей, как всплывающие подсказки или другие элементы, которые не должны отображаться за пределами определенной области.
TIP
Области ножниц могут быть вложенными! Но убедитесь, что вы отключаете менеджер ножниц столько же раз, сколько и включали его.
Чтобы включить менеджер ножниц, просто используйте метод DrawContext.enableScissor(...)
. Аналогично, чтобы отключить менеджер ножниц, используйте метод DrawContext.disableScissor()
.
// Let's create a scissor region that covers a middle bar section of the screen.
int scissorRegionX = 200;
int scissorRegionY = 20;
int scissorRegionWidth = 100;
// The height of the scissor region is the height of the screen minus the height of the top and bottom bars.
int scissorRegionHeight = this.height - 40;
// x1, y1, x2, y2
context.enableScissor(scissorRegionX, scissorRegionY, scissorRegionX + scissorRegionWidth, scissorRegionY + scissorRegionHeight);
// Let's fill the entire screen with a color gradient, it should only be visible in the scissor region.
// x1, y1, x2, y2, color1, color2
context.fillGradient(0, 0, this.width, this.height, 0xFFFF0000, 0xFF0000FF);
// Disable the scissor region.
context.disableScissor();
Как видите, даже несмотря на то, что мы говорим игре отрисовывать градиент по всему экрану, она отрисовывает его только в области ножниц.
Не существует единственно «правильного» способа отрисовки текстур на экране, поскольку метод drawTexture(...)
имеет множество различных перегрузок. В этом разделе будут рассмотрены наиболее распространенные варианты использования.
Обычно рекомендуется использовать перегрузку, которая задает параметры textureWidth
и textureHeight
. Это связано с тем, что класс DrawContext
примет эти значения, если вы их не предоставите, что иногда может быть неверным.
Identifier texture = Identifier.of("minecraft", "textures/block/deepslate.png");
// texture, x, y, u, v, width, height, textureWidth, textureHeight
context.drawTexture(texture, 90, 90, 0, 0, 16, 16, 16, 16);
Вот тут-то и появляются u
и v
. Эти параметры определяют верхний левый угол текстуры для рисования, а параметры regionWidth
и regionHeight
определяют размер части текстуры для рисования.
Давайте возьмем эту текстуру в качестве примера.
Если мы хотим нарисовать только область, содержащую увеличительное стекло, мы можем использовать следующие значения u
, v
, regionWidth
и regionHeight
:
Identifier texture2 = Identifier.of("fabric-docs-reference", "textures/gui/test-uv-drawing.png");
int u = 10, v = 13, regionWidth = 14, regionHeight = 14;
// texture, x, y, width, height, u, v, regionWidth, regionHeight, textureWidth, textureHeight
context.drawTexture(texture2, 90, 190, 14, 14, u, v, regionWidth, regionHeight, 256, 256);
Класс DrawContext
имеет различные интуитивно понятные методы визуализации текста — для краткости они здесь не будут рассматриваться.
Допустим, мы хотим нарисовать на экране «Hello World». Для этого мы можем использовать метод DrawContext.drawText(...)
.
// TextRenderer, text (string, or Text object), x, y, color, shadow
context.drawText(client.textRenderer, "Hello, world!", 10, 200, 0xFFFFFFFF, false);