Guten Morgen!
Folgendes:
In meinem Spiel kann man selber eine "Welt" erstellen und diese auch abspeichern (das Spiel ist 2d, die Dateien haben nie mehr als 1 kb, also kein großer Aufwand). Das Funktioniert ganz toll, man kann auch immer die Dateien von der SD-Card auslesen lassen. Das große Feature an dem Ganzen ist, dass ich diese Dateien zum weiter verschicken bereitstellen möchte (egal ob per Mail oder Skype,...). Sobald ich jetzt aber nur die Datei kopiere und diese erneut in den selben Ordner speichere, ist der größte Teil (der kopierten Datei) der Welt zerstört bzw. einfach weg. Ein paar Elemente sind noch zu sehen, aber warum nur diese?
Ist das kopieren denn so ungenau? Ich hab es noch nicht versucht, von einem Handy zum anderen zu schicken, da es ja sogar schon beim kopieren auf dem eigenen scheitert.
Wie ich die Dateien abspeichere:
// +++ Lvl Speichern & Laden +++ //
public void lvlSpeichern(ArrayList<GraphicObject> objectList, String lvlname){
try {
File pfad = new File("/sdcard/ABCD/");
pfad.mkdirs();
File outputFile = new File(pfad, lvlname);//+".abcd");
try {
FileOutputStream fos = new FileOutputStream(outputFile);
fos = context.openFileOutput(lvlname, Context.MODE_PRIVATE);
fos.write(objectList.size());
for (int i = 0; i < objectList.size(); i++){
int obj[][] = new int[objectList.size()][3];
GraphicObject object = objectList.get(i);
obj[i][0] = object.bitmapID; fos.write(obj[i][0]);
obj[i][1] = (int)object.xfeld(); fos.write(obj[i][1]);
obj[i][2] = (int)object.yfeld(); fos.write(obj[i][2]);
}
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
System.out.println("GESPEICHERT: LvlSpeichern " + objectList.size());
} catch (Exception e) {
e.printStackTrace();
System.out.println("NICHT GESPEICHERT: LvlSpeichern");
}
Alles anzeigen
Und das Laden sieht wie folgt aus:
public void lvlLaden(ArrayList<GraphicObject> objectList, String lvlname, boolean create){
try {
inputStream = context.openFileInput(lvlname);
int grosse = inputStream.read();
int obj[][] = new int[grosse+1][3];
for (int i = 1; i <= grosse; i++) {
obj[i][0] = inputStream.read();
obj[i][1] = inputStream.read();
obj[i][2] = inputStream.read();
GraphicObject object;
if (create){
Bitmap bm = getBitmap(obj[i][0]);
if (bm == null){((CreationActivity) context).finish();}
object = new GraphicObject(bm, obj[i][1]*bm.getWidth(), obj[i][2]*bm.getHeight());
objectList.add(object);
}
}
inputStream.close();
System.out.println("GELADEN: lvlLaden " + objectList.size());
} catch (IOException e) {
e.printStackTrace();
System.out.println("NICHT GELADEN: lvlLaden");
}
}
Alles anzeigen
Ich bezweifle jedoch, dass es an diesen Code liegen wird, sonst würde es ja auch ohne es zu kopieren nicht funktionieren.
Weiters würde ich gerne eine eigene Dateiendung für diese Spieldateien anlegen, damit ich aussortieren kann, welche Dateien im Spiel angezeigt werden und welche nicht, und damit man auch ohne im spiel sein zu müssen mittels Datei anklicken das Spiel gestartet wird. Bisher habe ich es mit .abcd versucht, aber gibt es hierbei denn etwas zu beachten? Wie kann ich einstellen, dass das Standardprogramm für ".abcd" Dateien mein Spiel ist?
Ich freue mich auf Antworten
MfG Salmii