2016-07-16 13 views
1

in Mein Spiel wird gespeichert, ich eine Menge von Punkten für jede Ebene haben, die so genannte „Punkte“, „Points1“ Und „Points2“Große Daten in die Datenbank

zum Beispiel in der Ebene 1 Ich habe diese Punkte:

Stufe

1:

Poitns: (0.3,0.04), (0.2,0.25), (1.5,0.5), (0.2,0.5), (0.3,0.04)

Poitns1: (0.5,0.04) (0,6,0,35), (0,5,0,5), (0,2,0,5), (0,3,0,04), (0,2,0,04)

Poitn s2: (0.3,0.04), (0.6,0.34), (0.5,0.5), (0.2,0.5), (0.3,0.04), (0.3,0.04)

Stufe 2: ...

Stufe 3: ...

ich habe über 90 Levels in meinem Spiel und haben jeweils ihre Daten,

die Frage ist, wie kann ich thees Daten in die Datenbank speichern?

Eine Option ist eine Tabelle erstellen für jeden, Point1.x, Point1.y, Point2.x und ...

dies eine große Datenbank sein wird, mit 6 Tischen. Eine andere Option besteht darin, Daten für alle Point1-Daten in einer Tabelle als String zu speichern und die Gleitkommazahlen durch Parsing herauszuziehen (z. B. Speichern von 0.3,0.2,1.5,0.2,0.3,0.04 für points.x und dann Parsen der .p2) Daten für jede Zeile und überprüfen, wenn es "," erreicht ...) aber das ist eine so schwere Operation für Android.

Was wird die beste Wahl sein? Gibt es einen alternativen Weg außer der Datenbank?

und wenn nicht, Wie sollte ich diese Daten speichern, um weniger Speicher für die Berechnung und das Erreichen der Daten zu verwenden?

+0

Sind die Punkte in jedem Level gleich? Ich meine "Points" "Point1" "Point2" und nicht mehr oder weniger? Auch "Punkte" hat immer 5 Klammerelemente und "Punkte1" mit "Punkte2" haben immer 6 Klammerelemente? – Marat

+0

@Marat nein es gibt keine Rolle dafür, Alle können für jede Ebene unterschiedlich sein Und die Anzahl der Punkte ist auch für jede Ebene anders –

+0

Erstelle zwei Arten von Tabelle: Level & Punkte. Dann setze in jedem Level die richtigen Punkte. – Amir

Antwort

1

Ich denke, Sie können es mit SQLite db tun. Es ist ein großartiges Tool zum Speichern und Bearbeiten von Texten. Ich bin nicht vertraut mit anderen Datenbanken, aber ich kann Ihnen meine Sicht auf, wie dies zu lösen, wenn Sie SQLite db verwenden würde sagen. Ich hoffe, dass andere Leute antworten und über alternative Datenbanken berichten, so dass Sie alle vergleichen können.

Wie Sie gesagt haben, könnten Sie alle Fließkommazahlen für einen Punkt in einer einzelnen Zeichenfolge speichern. Erstellen Sie dann nur eine Tabelle, um alle Daten zu speichern. Es würde ungefähr so ​​aussehen.

_id | Points | Level 1 | Level 2 | Level 3 | ... | Level 90 
---------------------------------------------------------------------- 
    1 | Point1 | "0.3,..." | "0.4,..." | "0.3,..." | ... | "0,6,..." 
    2 | Point2 | "0.2,..." | null | "0.1,..." | ... | null 
    3 | Point3 | "0.3,..." | "0.5,..." | "0.4,..." | ... | "0.2,..." 
... 
... 

von null meine ich die Ebenen, auf denen bestimmte Punkte nicht anwendbar ist. Oder Sie können stattdessen nur eine leere Zeichenfolge "" schreiben. Und _id ist die Spalte PRIMARY KEY AUTOINCREMENT, nur um automatisches Einfügen neuer Point-Zeilen zu verwalten (wirkt sich nicht auf Ihre Daten aus).

Die Idee ist, dass Sie auf diese Weise eine beliebige Anzahl von Zeilen und eine feste Anzahl von Spalten (in diesem Fall 90) haben könnten. Es könnte jedoch andere bessere oder ähnliche Lösungen für den Tisch geben.

Angesichts der Geschwindigkeit der modernen Prozessoren (1-2 GHz/Kern) können Sie bis zu Milliarden Operationen in einer Sekunde erledigt haben. Vergleichen Sie diese Anzahl mit der Größe Ihrer String-Elemente. Ich bin mir sicher, dass Ihre Points-Zeichenfolge nicht zu lang sein wird, um beim Extrahieren aus db ausreichend Zeit für die Verarbeitung zu haben. Daher müssen Sie sich keine Gedanken über die Geschwindigkeit machen.Sie können diese Prozesse sogar im Hintergrund starten, sodass sich dies nicht auf Ihre Benutzeroberfläche auswirkt.

Nachteile:

Es ist nicht leicht 90 Spalten zu erzeugen, indem sie alle in dem onCreate innerhalb von SQLiteOpenHelper zu. Aber es ist nur eine einmalige Aufgabe.

Das war also meine Lösung. Hoffe es hilft dir irgendwie. Ich bin auch neugierig auf andere Datenbanken, die helfen könnten, dieses Problem leichter zu lösen, wenn es möglich ist.

+0

@ Alireza.pir war meine Antwort hilfreich für Sie? Wenn ja, akzeptiere und stimme meine Antwort zu. Ich werde es zu schätzen wissen. – Marat