1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Spielstand und Spielfiguren sichern (in: onCreate(savedInstanceState) ?)

Dieses Thema im Forum "Android Spiele Entwicklung" wurde erstellt von menseken, 05.05.2011.

  1. menseken, 05.05.2011 #1
    menseken

    menseken Threadstarter Neuer Benutzer

    Beiträge:
    12
    Erhaltene Danke:
    0
    Registriert seit:
    30.03.2011
    Hallo!

    Dank (u.a.) Eurer Hilfe konnte ich zuletzt ein JavaScript-Programm für Android-Java umbauen, (hier).

    Einige kleine Bugs sind noch drin:

    Meine App bringt z.B. leider beim "Resume" (vom Desktop, usw.) die unschöne Meldung der "unerwarteten Beendigung". Ich nehme an, dass ich folgendes Array, das das Spiel beschreibt, irgendwie sichern müsste.

    WIE ungefähr kann ich das WO am besten machen?
    Code:
    int mJall[][][][]=new int[8][9][7][3]; // ALLES: Reihe/Zeile/Höhe/ Name,X-,Y-Wert
    (Oben werden die Werte später eingesetzt.)

    Folgender (vereinfachter) Code malt die Steine in die Canvas einer SurfaceView:
    Code:
    private void doDraw(Canvas canvas) {
       for (int i=0;i<8;i++)   for (int j=0;j<9;j++)   for (int k=0;k<7;k++){
          canvas.drawBitmap(myBitmaps [mJall[i][j][k][0]], i*62-k*8, j*67-k*7, null);
    }}
    (Nach und nach werden die gelöschten Steine im Array markiert.)

    Vielen Dank schon im Voraus für Eure Hilfe!

    (Als kleine Info hier das schon 'mal gepostete Bild: )
    .
     

    Anhänge:

  2. swordi, 05.05.2011 #2
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    ganz genau

    du solltest im onPause() deinen spielstand sichern

    und im onResume wieder laden

    bzgl deiner fehlermeldung - schau im logcat nach, das gibt nützliche hinweise
     
  3. menseken, 05.05.2011 #3
    menseken

    menseken Threadstarter Neuer Benutzer

    Beiträge:
    12
    Erhaltene Danke:
    0
    Registriert seit:
    30.03.2011
    Hmmm - ja.

    ... aber wie? :

    In eine neue Variable? In eine SQLite-DB?

    Könntest Du mir sagen, wie & wohin ich das am besten mache?
    (Ich bin kein Informatiker, sondern Grafiker mit Spieldrang...)
     
  4. swordi, 05.05.2011 #4
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    naja

    du benötigst halt eine globalere datenstruktur, die auch beim erneuten öffnen der app, wenn sie noch im hintergrund läuft, die daten behaltet.

    evtl eine datenstruktur in der application anlegen.
     
  5. ko5tik, 06.05.2011 #5
    ko5tik

    ko5tik Android-Experte

    Beiträge:
    620
    Erhaltene Danke:
    40
    Registriert seit:
    14.10.2009
    Phone:
    HTC Hero
    Ich würde empfehlen einen Java-Object-\[Baum\] im JSON-Datei zu sichern. Ich verwende meine selbstgestrickte Datenbindung-Bibliothek:

    https://github.com/ko5tik/jsonserializer
     
  6. menseken, 07.05.2011 #6
    menseken

    menseken Threadstarter Neuer Benutzer

    Beiträge:
    12
    Erhaltene Danke:
    0
    Registriert seit:
    30.03.2011
    Vielen Dank für Eure hilfreichen Antworten -

    ... aber ich bin leider "nur" ein Grafiker, der versucht ein vorhandenes Problem auf (für mich) übersichtliche Art & Weise zu lösen.
    Ich habe auf der developer.android.com-Seite Folgendes gefunden:

    Ich habe zwar ein 4-dimensionales Array, aber das werde ich dann (wie bei der Erstellung) über mehrfach geschachtelte for-Schleifen als String speichern.

    Danke nochmals, Ciao, Clemens
     
  7. JoeBonham, 12.05.2011 #7
    JoeBonham

    JoeBonham Neuer Benutzer

    Beiträge:
    1
    Erhaltene Danke:
    1
    Registriert seit:
    12.05.2011
    Hallo menseken,
    zum Speichern deines int-arrays kannst du die onSaveInstanceState-Methode in deiner Activity wie folgt überschreiben:
    @Override
    public void onSaveInstanceState(Bundle savedInstanceState){
    //savedInstanceState.putIntArray(key, value);
    savedInstanceState.putIntArray("MeineSteinchen", mJall[][][]);
    super.onSaveInstanceState(savedInstanceState);
    }

    Nun wird beim Stoppen (z.B. Display-Orientierungswechsel) der Anwendung das int-array gespeichert.

    Beim Start/Resume der Anwendung holst du es dann in der onCreate-methode folgendermaßen zurück:
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mJall[][][] = savedInstanceState.getIntArray("MeineSteinchen");
    ...

    Hoffe, dass ich rechtzeitig helfen konnte.
    Marco
     
    menseken bedankt sich.
  8. menseken, 12.05.2011 #8
    menseken

    menseken Threadstarter Neuer Benutzer

    Beiträge:
    12
    Erhaltene Danke:
    0
    Registriert seit:
    30.03.2011
    Das sieht ja wirklich GUT aus:

    übersichtlich, verständlich und KONKRET !
    Vielen Dank, Marco - ich gehe davon aus, dass es genau so funktioniert.

    DANKE !
     

Diese Seite empfehlen