GUI

在本节,我们将创建我们自己的GUI。

在开始之前,我们还是要注意一下,GUI的相关操作只能在客户端进行,不能在服务端进行。有关的将会在下一节讲解。

我们在3.3.3章节创建了一个铁箱子,那么我们现在就来给它添加GUI。

创建GUI

首先,我们要创建类IronChestScreen.java,并使其继承Screen。它还要求你传入一个标题,类似于这个GUI的ID,我们填入即可。

public class IronChestScreen extends Screen {
    public IronChestScreen() {
        super(new StringTextComponent("iron_chest"));
    }
}

然后就是GUI的组件和渲染部分了。组件在init()方法添加,渲染在render()方法进行。

添加组件

首先,我们覆写init()方法。在Screen中有一个方法addButton(),专门用于添加按钮。它还有一个Listchildren,用于添加按钮以外的组件。

我们先添加一个关闭按钮。

this.addButton(new Button(int widthIn, // 按钮在屏幕上的X坐标
                          int heightIn, // 按钮在屏幕上的Y坐标
                          int width, // 按钮的宽
                          int height, // 按钮的高
                          String text, // 按钮上显示的文字
                          Button.IPressable onPress // 按钮按下后执行的语句,要用到lambda语句
                         );

其他部分没什么好讲的,主要就是onPress这里。这里需要用到lambda语句:

(press) -> {
    this.getMinecraft().displayGuiScreen(null); // 使Minecraft显示的GUI为null,即关闭GUI
}

然后我们还要创建一个文本框,用于搜索。

private TextFieldWidget textFieldWidget; // 创建一个成员变量,待会渲染会用到

this.textFieldWidget = new TextFieldWidget(this.font, this.width / 2 - 75, 5, 150, 15, "搜索");
this.children.add(this.textFieldWidget);

界面渲染

我们接下来就要渲染我们的GUI界面。

我们先覆写render方法,然后再加一句this.renderBackground();让Minecraft为我们渲染渐变背景。然后,我们还要再加一句RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F);确保渲染出来的内容不会偏色。

我们接着还要绑定材质:

private static final ResourceLocation TEXTURE = new ResourceLocation(ModderGuide.MODID, "textures/gui/iron_chest.png");

this.getMinecraft().getTextureManager().bindTexture(TEXTURE);

然后就是最重要的了:渲染材质。我们用blit方法渲染。

this.blit(int x, int y, int u, int v, int width, int height);

blit其实有很多种方法,这里演示的只是我常用的一种。

但我们的GUI还没有完工,打开游戏,会发现我们的按钮和文本框并没有被渲染出来。因为我们只是往GUI中添加了组件,但并没有渲染组件。因此,我们还要为其添加渲染。

this.textFieldWidget.render(p_render_1_, p_render_2_, p_render_3_); // 渲染文本框
super.render(p_render_1_, p_render_2_, p_render_3_); // 调用父类的render方法,渲染按钮的语句,父类已经帮我们写好了

打开GUI

// TOTO 待更新 2020-01-17 vvvbbbcz

results matching ""

    No results matching ""