1

最初に、私は Java を学ぼうとして本当にいじっているだけです。この時点でやりたいことは、文字列を画面に表示することだけです。

mod_Bite クラスと BiteGui クラスがあります。(バイトは勝手な名前です、当時食べてました)

//mod_Bite.java
package net.minecraft.src;

import net.minecraft.client.Minecraft;

public class mod_Bite extends BaseMod {

    @Override
    public String getVersion() {
        return "1.0";
    }

    @Override
    public void load() {
        ModLoader.setInGameHook(this, true, true);
    }

    public mod_Bite() {
    }

    @Override
    public boolean onTickInGame(float tick, Minecraft mc)
    {
        return true;
    }
}

//BiteGui.java
package net.minecraft.src;
import net.minecraft.client.Minecraft;

public class BiteGui extends Gui {

    private Minecraft mc;

    public BiteGui(){
        drawBiteGui();
    }

    public void drawBiteGui() {
        FontRenderer fr = this.mc.fontRenderer;
        drawString(fr, "Testing!", 5, 5, 0xffffff);
    }
}

私が理解していないのは、それを作成する方法です。onTickInGame メソッドで BiteGui のオブジェクトを作成してみました (ティックごとに作成する必要はないと思いますが)

public boolean onTickInGame(float tick, Minecraft mc)
{
    BiteGui biteObj = new BiteGui();
    return true;
}

しかし、null ポインター例外があると表示されています。これは、私の知る限り、値が割り当てられていないもの、または何も指していないものを使用しようとしていることを意味します。私は明らかにここで何かをしていません。


編集:コードを変更しましたが、画面にとどまるのではなく、ティックごとにテキストが点滅することを除いて機能します。これは明らかに onTickInGame メソッドでオブジェクトを作成しているためですが、他の場所から Minecraft を初期化する方法がわかりません。

package net.minecraft.src;

import net.minecraft.client.Minecraft;

public class mod_Bite extends BaseMod {

    @Override
    public String getVersion() {
        return "1.0";
    }

    @Override
    public void load() {
        ModLoader.setInGameHook(this, true, true);
    }

    public mod_Bite() {

    }

    @Override
    public boolean onTickInGame(float tick, Minecraft mc)
    {
        BiteGui biteObj = new BiteGui(mc);
        return true;
    }
}

package net.minecraft.src;
import net.minecraft.client.Minecraft;

public class BiteGui extends Gui {

    private Minecraft mc;

    public BiteGui(Minecraft minecraft) {
        this.mc = minecraft;
        drawBiteGui();
    }

    public void drawBiteGui() {
        FontRenderer fr = this.mc.fontRenderer;
        drawString(fr, "Testing!", 5, 5, 0xffffff);
    }
}
4

2 に答える 2

2

クラスで初期化mcすることはありません。BiteGui次に、でそれを参照しようとしdrawBiteGuiますthis.mc.fontRenderer。これはあなたが言うようにあなたに与えるでしょNullPointerExceptionう。

private Minecraft mc;

...は..。と同等です。

private Minecraft mc = null;

コンストラクターに何かを追加して、何かBiteGuiに初期化する必要があります。

于 2013-03-17T22:07:23.337 に答える
1

まばたきを止める方法を見つけました!mod_Bite では、

これを変える:

ModLoader.setInGameHook(this, true, true);

これに:

ModLoader.setInGameHook(this, true, false);
于 2013-10-25T00:06:56.897 に答える