O
Oneric
Gast
Hallo,
ich hab vor kurzer Zeit angefangen ein einfaches 2D-Game im Terraria/Minecraft Style in Java zu schreiben. Ich bin gerade dabei ein Savesytem zu schreiben damit man seine Bauten auch speichern kann.
Allerdings tritt beim Auslesen eines Saves immer das Problem auf das die BlockID nicht mehr korrekt erkannt wird, wodurch auf einmal die Luft solid ist, etc..
Hier ist mein SourceCode
Danke für eure Hilfe,
Oneric
ich hab vor kurzer Zeit angefangen ein einfaches 2D-Game im Terraria/Minecraft Style in Java zu schreiben. Ich bin gerade dabei ein Savesytem zu schreiben damit man seine Bauten auch speichern kann.
Allerdings tritt beim Auslesen eines Saves immer das Problem auf das die BlockID nicht mehr korrekt erkannt wird, wodurch auf einmal die Luft solid ist, etc..
Hier ist mein SourceCode
Java:
package net.MC_2D.src;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.StringBuilder;
public class SaveManager {
public SaveManager()
{
}
public void saveWorld(String directionName)
{
System.out.println("Beginne speichern...");
StringBuilder builder = new StringBuilder();
//String saveOrder = builder.append("saves/").append(directionName).toString();
/**String levelSave = builder.append("saves/").append(directionName).append("/level.dat").toString();*/
/*if(!new File(levelSave).exists())
{
new File(levelSave).mkdirs();
}*/
try {
FileOutputStream fileSchreib = new FileOutputStream("saves/level.region");
ObjectOutputStream schreiben = new ObjectOutputStream(fileSchreib);
for(int x = 0; x < Level.worldW; x++)
{
for(int y = 0; y < Level.worldH; y++)
{
int[] id = Component.level.block[x][y].id;
schreiben.writeObject(id);
//schreiben.write(sign);
//schreiben.writeInt(Component.level.block[x][y].id[1]);
//schreiben.write((byte)strich);
}
}
//schreiben.write(-99);
schreiben.flush();
schreiben.close();
System.out.println("Gespeichert");
}
catch (IOException e) {
e.printStackTrace();
}
}
public static void loadWorld()
{
Component.isMenu = false;
for(int x = 0; x < Level.worldW; x++)
{
for(int y = 0; y < Level.worldH; y++)
{
Component.level.block[x][y].id = Tile.air;
}
}
int[] id;
int[] air = {-1, -1};
int[] solidAir = {-1, -2};
try {
FileInputStream leseFile = new FileInputStream("saves/level.region");
ObjectInputStream leseStrom = new ObjectInputStream(leseFile);
/*do{*/
for(int x = 0; x < Level.worldW; x++)
{
for(int y = 0; y < Level.worldH; y++)
{
id = (int[]) leseStrom.readObject();
/**
Diese Abfragen würden das Problem zwar
auch lösen werden aber mit mehreren Blöcken
immer aufwendiger(Hier wurden auch nur die Luft
ausgetauscht)
*/
if(id[0] == air[0] && id[1] == air[1])
{
Component.level.block[x][y].id = Tile.air;
}
else
{
Component.level.block[x][y].id = id;
}
}
}
leseStrom.close();
System.out.println( Component.level.block[1][1].id[0]);
System.out.println( Component.level.block[1][1].id[1]);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
Danke für eure Hilfe,
Oneric