1

我正在制作一个我的世界模组,它为玩家实现了一个新的“能量”系统。获取这种能量的方法有很多种,我希望它能在屏幕上显示玩家的能量。我的计划是制作一个使用名为“energybar.png”的文件的 GUI(使用 OpenGL,就像我的世界使用的那样):

能量条.png

打印数字。这是我为将按照描述执行的方法的代码。

@SubscribeEvent
public void onGUIRenderEvent(RenderGameOverlayEvent event){

    if(event.isCancelable() || event.type != RenderGameOverlayEvent.ElementType.EXPERIENCE)
    {
        return;
    }

    int xPos = 10;
    int yPos = 10;
    GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
    GL11.glDisable(GL11.GL_LIGHTING);

    mc.renderEngine.bindTexture(energybar);

    String energyString = Integer.toString(Energy.PlayerTotalEnergy);

    for(int i=0; i < energyString.length(); i++) {
        LogHelper.info("Energy: " + energyString);
        drawTexturedModalRect(xPos, yPos, (Energy.PlayerTotalEnergy / (int)Math.pow(10, i))*16, 0, 16, 16);
        xPos += 16;
    }

}

照片中的每个数字都是间隔开的,因此它应该在其各自的 16 个像素中(即:0 是 x 位置 0-16,1 是 x 位置 17-32,等等)。照片是 256x256,由 minecraft 的 GUI 系统标准定义。这是绘制图片的方法的布局:

void drawTexturedModalRect(int xPosition, int yPosition, int uPosition, int vPosition, int width, int height)

我遇到的问题是我需要打印到屏幕上的数字的 U 位置无法正常工作。

我也试过通过:

energyString.substring(i, i)

到一个获取子字符串并将其转换回整数并将其乘以 16 以获得 uPosition 的方法,但是当我执行以下操作时:

String energyString = Integer.toString(Energy.PlayerTotalEnergy);

Integer.toString()方法String.valueOf()有零问题。例如,如果Energy.PlayerTotalEnergy只是0,他们不会返回一个字符串"0",他们只是返回""

如果有人能帮我弄清楚为什么我不能让它工作,或者想出一个更好的主意,我可以如何使用 Minecraft 和 OpenGL 将这个数字打印到我的屏幕上。我不只是将其打印为数字的原因是因为我想保留红色数字的外观。

4

1 回答 1

1

这更像是一种猜测。在我看来,如果Energy.PlayerTotalEnergy是,比方说327,那么你的uPosition意志是:

i=0: u= 327*16
i=1: u= 32*16
i=2: u= 3*16

你的意思是让他们成为7*16,2*163*16吗?在这种情况下,您应该mod使用10

drawTexturedModalRect(xPos, yPos, ( (Energy.PlayerTotalEnergy / (int)Math.pow(10, i))%10)*16, 0, 16, 16);
于 2015-04-17T19:21:33.877 回答