- 42
- 8
Здравствуйте. Снова проблемы с наложением png-к на Gui, начинает уже вымораживать эта куча нюансов, связанная с рендерингом. Пытался поправить сам, но не получилось, нужна помощь.
Перед описанием проблем, сброшу код GuiContainer:
Проблема 1: что-то странное происходит с файлом внутри ассетов.
Имею картинку размером 1024x1024, надо наложить по центру экрана в виде бэкграунда. Пихаю в ассеты, перезагружаю их через F3+T. Всё отображается, но размер не тот совершенно, что должен быть. Пример в двух скриншотах:
В общем-то, с этим явно какая-то дичь. Картинка в размерах уменьшается и начинает дублироваться по экрану. Кто-то ранее с таким встречался? Прошу помочь по возможности.
Проблема 2: расширение экрана.
В коде можно заметить дебаговую строку, которая каждый рендер-тик бросает в консоль конфигурации экрана и Gui. Это сделано было для того, чтобы выявить проблему с другим Gui, которое стояло на этом же коде, но так же не работало. То дублировалось, то ещё что-то, в зависимости от того, что менял. В чём же подвох? А вот в чём: расширение экрана меняется в зависимости от скалирования интерфейса и размеров самого экрана (параметры width и height).
Прикрепляю 3 вариации ответа в консоль с кодом выше:
Малый размер:
Обычный размер:
Крупный размер:
P.S. Пока записывал результаты тестов с консоли, заметил, что размер картинки, выводимой через drawTexturedModalRect зависит от скалирования интерфейса.
Вытекает общий вопрос: как текстуру правильнее подогнать под размер интерфейса? Можно ли отвязать её от размеров интерфейса и тупо рендерить на экран(в таком случае будет вылезать при маленьких размерах интерфейса, скорее всего)?
Видимо, я запутался во всей этой горе набранной информации, что не могу найти какую-то простую истину. Прошу указать мне на мою ошибку и дать совет, как сделать правильнее в этой ситуации.
Спасибо
Перед описанием проблем, сброшу код GuiContainer:
Java:
public class PassGui extends GuiContainer {
public PassInventory inv;
public PassGui(EntityPlayer player) {
super(new PassContainer(player));
this.allowUserInput = false;
/*this.xSize = 864;
this.ySize = 468;*/
this.xSize = 353;
this.ySize = 550;
}
public static final ResourceLocation background = new ResourceLocation("gamepass", "textures/gui/lich.png");
@Override
protected void drawGuiContainerBackgroundLayer(float f, int i, int j) {
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
this.mc.getTextureManager().bindTexture(background);
int cornerX = (this.width - this.xSize) / 2;
int cornerY = (this.height - this.ySize) / 2;
GamePassMod.getLogger().info("cornerX: "+cornerX+", cornerY: "+cornerY+", width: "+this.width+", height: "+this.height+", xSize: "+this.xSize+", ySize: "+this.ySize);
drawTexturedModalRect(cornerX, cornerY, 0, 0, this.xSize, this.ySize);
}
}
Проблема 1: что-то странное происходит с файлом внутри ассетов.
Имею картинку размером 1024x1024, надо наложить по центру экрана в виде бэкграунда. Пихаю в ассеты, перезагружаю их через F3+T. Всё отображается, но размер не тот совершенно, что должен быть. Пример в двух скриншотах:
В общем-то, с этим явно какая-то дичь. Картинка в размерах уменьшается и начинает дублироваться по экрану. Кто-то ранее с таким встречался? Прошу помочь по возможности.
Проблема 2: расширение экрана.
В коде можно заметить дебаговую строку, которая каждый рендер-тик бросает в консоль конфигурации экрана и Gui. Это сделано было для того, чтобы выявить проблему с другим Gui, которое стояло на этом же коде, но так же не работало. То дублировалось, то ещё что-то, в зависимости от того, что менял. В чём же подвох? А вот в чём: расширение экрана меняется в зависимости от скалирования интерфейса и размеров самого экрана (параметры width и height).
Прикрепляю 3 вариации ответа в консоль с кодом выше:
Малый размер:
INFO: cornerX: 783, cornerY: 234, width: 1920, height: 1018, xSize: 353, ySize: 550
Обычный размер:
INFO: cornerX: 303, cornerY: -20, width: 960, height: 509, xSize: 353, ySize: 550
Крупный размер:
INFO: cornerX: 63, cornerY: -147, width: 480, height: 255, xSize: 353, ySize: 550
P.S. Пока записывал результаты тестов с консоли, заметил, что размер картинки, выводимой через drawTexturedModalRect зависит от скалирования интерфейса.
Вытекает общий вопрос: как текстуру правильнее подогнать под размер интерфейса? Можно ли отвязать её от размеров интерфейса и тупо рендерить на экран(в таком случае будет вылезать при маленьких размерах интерфейса, скорее всего)?
Видимо, я запутался во всей этой горе набранной информации, что не могу найти какую-то простую истину. Прошу указать мне на мою ошибку и дать совет, как сделать правильнее в этой ситуации.
Спасибо