有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

库存栏上方的java Minecraft信息栏完全人为创建

我已在以下代码行中隔离了该问题:

Minecraft.getMinecraft().fontRendererObj.drawStringWithShadow(etc)

我非常困惑,为什么它会把xp栏、健康栏、食物栏和盔甲栏当成人工制品。以下是我的部分代码:

// the main code
public void postInit(FMLPostInitializationEvent event) {
    MinecraftForge.EVENT_BUS.register(new MyMod());
}

// MyMod class
public uiCreator;
public MyMod() {
    uiCreator = new UICreator();
}

@SubscribeEvent
public void onGui(RenderGameOverlayEvent event) {
    uiCreator.Create();
}

// UICreator class
public void Create() {
    GlStateManager.scale(1.5, 1.5, 1.5);
    Minecraft.getMinecraft().fontRendererObj.drawStringWithShadow("MyMod", 2, 2, 0xffffff);
    GlStateManager.scale(1 / 1.5, 1 / 1.5, 1 / 1.5);
}

实际上,导致伪影的线是Minecraft.getMinecraft().fontRendererObj.drawStringWithShadow("MyMod", 2, 2, 0xffffff);。我不明白为什么。我敢肯定是这一行,因为删除/注释掉代码的任何其他部分都不会修复工件,直到我注释掉这一行。我非常困惑为什么会发生这种情况。如果有人有任何见解,我将不胜感激

Artifacting Info Bar


共 (1) 个答案

  1. # 1 楼答案

    问题如下:

    当你尝试拉丝时,它会用文本纹理替换纹理。因此,之后渲染的任何内容最终看起来都像文本,而不是正确的图标,因为纹理在内存中被替换。为了避免这种情况,请使用RenderGameOverlayEvent.Post并检查event是否正在获取文本呈现的类型