🇺🇦 Українська (Ukrainian - Ukraine)
🇺🇦 Українська (Ukrainian - Ukraine)
Зовнішній вигляд
🇺🇦 Українська (Ukrainian - Ukraine)
🇺🇦 Українська (Ukrainian - Ukraine)
Зовнішній вигляд
Ця сторінка написана для версії:
1.21.4
Ця сторінка передбачає, що ви переглянули сторінку основні концепції промальовування.
Клас 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
прийматиме ці значення, якщо ви їх не надасте, що іноді може бути неправильним.
Вам також потрібно буде вказати шар візуалізації, на якому намальована ваша текстура. Для звичайних текстур зазвичай завжди буде RenderLayer::getGuiTextured
.
Identifier texture = Identifier.of("minecraft", "textures/block/deepslate.png");
// renderLayer, texture, x, y, u, v, width, height, textureWidth, textureHeight
context.drawTexture(RenderLayer::getGuiTextured, texture, 90, 90, 0, 0, 16, 16, 16, 16);
Ось де входять «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;
// renderLayer, texture, x, y, width, height, u, v, regionWidth, regionHeight, textureWidth, textureHeight
context.drawTexture(RenderLayer::getGuiTextured, 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);