1

プレイヤーに新しい「エネルギー」システムを実装するマインクラフト MOD を作成しています。このエネルギーを取得するにはさまざまな方法があり、プレイヤーのエネルギー量を画面に表示したいと考えています。これに対する私の計画は、「energybar.png」というファイルを使用する GUI (Minecraft が使用するように OpenGL を使用) を作成することです。

energybar.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 など)。写真は、Minecraft の GUI システムの標準で定義されている 256x256 です。これは、絵を描くメソッドのレイアウトです。

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が just0の場合、文字列は返されず、"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*16mod10

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