私は OpenGL の練習用に Minecraft のレプリカを作成してきましたが (多くの人が推測しているように)、基本的なレンダリング API を作成した後、実際の Minecraft は多くのメモリを使用することに気付きました - 約 800MB です! モブとおそらくジェネレーターの地形データと一緒に記憶しなければならないすべてのブロックがある理由を完全に理解できます... " C++にはポインターがあることを思い出したので、Javaで同じことをしようとしましたが、考えられる唯一の方法は、各ブロックの静的インスタンスを1つ作成し、new
キーワードを使用しないことですが、これが最善の方法ですか? それは間違いなく役立つようです..それが可能であれば、私はまだそれをより良くしたいと思いますか?
これが問題のクラスです..
public abstract class Block {
public static DirtBlock Dirt = new DirtBlock();
public static GrassBlock Grass = new GrassBlock();
public static RedstoneOreBlock RedstoneOre = new RedstoneOreBlock();
public static TNTBlock TNT = new TNTBlock();
public static MonsterSpawnerBlock Monserspawner = new MonsterSpawnerBlock();
public static BedrockBlock Bedrock = new BedrockBlock();
public static StoneBlock Stone = new StoneBlock();
public static GlassBlock Glass = new GlassBlock();
public static SandBlock Sand = new SandBlock();
public static WaterBlock Water = new WaterBlock();
public static SnowBlock Snow = new SnowBlock();
public static SnowGrassBlock SnowyGrass = new SnowGrassBlock();
public static IceBlock Ice = new IceBlock();
public static CoalBlock Coal = new CoalBlock();
現在のメモリ使用量は 100 チャンク ワールドで約 200MB で、各チャンクは幅 16、高さ 64、深さ 16 のブロックで構成され、合計 1,638,400 ブロック、ブロックあたり約 128 バイトです。