Daten einer Map verarbeiten: Array, Bank oder Type.

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Backbuffer

Betreff: Daten einer Map verarbeiten: Array, Bank oder Type.

BeitragMo, Jun 04, 2007 16:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Leute,

ich bin noch blutiger Anfänger und schreibe mein erstes Programm. Es ist ein Map-Editor bei dem ich auch eine Undo-/Redo-Funktion eingebaut habe. Dies habe ich zuerst so gemacht, dass ich die Karte vor und nach der Aktion des Benutzers als Array gespeichert habe.

Im Grunde funktionierts, aber das Programm läuft gerade bei größeren Maps da die ganze Zeit arrays gespeichert werden sehr langsam.

Nun meine Frage: Gibt es eine schnellere Methode als Arrays laden/speichern?

Danke für die Hilfe

BladeRunner

Moderator

BeitragMo, Jun 04, 2007 16:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Zum einen: Nicht Speichern, sondern im RAM behalten. Setzt voraus dass Du die Anzahl an Undos begrenzt.
Zum zweiten: Nicht die gesamte Map speichern, sondern nur die Veränderungen erfassen und sichern. Hilfreich wäre hier eine art Scriptsprache, die die vorhandenen Befehle rekonstruieren kann. Sollte sehr Flexibel sein, ist aber sicher auch extrem aufwändig und daher für den Anfänger wohl etwas zu viel. Setzt zudem viel Planung voraus.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

Backbuffer

BeitragMo, Jun 04, 2007 16:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für diese schnelle Antwort.

BladeRunner hat Folgendes geschrieben:
Zum einen: Nicht Speichern, sondern im RAM behalten. Setzt voraus dass Du die Anzahl an Undos begrenzt.

Ok, das bekomme ich glaub ich hin. Aber ist es dann in Ordnung wenn ich mit arrays arbeite?

BladeRunner hat Folgendes geschrieben:

Zum zweiten: Nicht die gesamte Map speichern, sondern nur die Veränderungen erfassen und sichern. Hilfreich wäre hier eine art Scriptsprache, die die vorhandenen Befehle rekonstruieren kann. Sollte sehr Flexibel sein, ist aber sicher auch extrem aufwändig und daher für den Anfänger wohl etwas zu viel. Setzt zudem viel Planung voraus.

Nun, das bekomme ich (noch?) nicht hin Smile

BladeRunner

Moderator

BeitragMo, Jun 04, 2007 16:32
Antworten mit Zitat
Benutzer-Profile anzeigen
In Ordnung ist das was funktioniert Wink
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

ChaosCoder

BeitragMo, Jun 04, 2007 16:33
Antworten mit Zitat
Benutzer-Profile anzeigen
*grml* etwas zu spät xD *grml*

Wie BladeRunner kannst du nur das speichern was mit dem letzten Schritt verändert wurde. Auch ohne ScriptSprache lassen sich hier alle Dinge rückgängig machen. Speicher einfach in nem Array jedes Feld was verändert wurde also zugehörige x und y position und den alten Inhalt.

Was er da von nicht Speichern sondern im RAM behalten sagt, finde ich grad etwas fehl am Platze, denn wie du schon sagtest speicherst du ja eh alles in ein Array was ja dann im RAM ist und nicht auf der Platte! o_O (<= habt ihr ja grade selber geklärt sorry Embarassed )
Projekte: Geolaria | aNemy
Webseite: chaosspace.de
 

Backbuffer

BeitragMo, Jun 04, 2007 16:38
Antworten mit Zitat
Benutzer-Profile anzeigen
ChAoS|DrAgOn hat Folgendes geschrieben:
*grml* etwas zu spät xD *grml*

Wie BladeRunner kannst du nur das speichern was mit dem letzten Schritt verändert wurde. Auch ohne ScriptSprache lassen sich hier alle Dinge rückgängig machen. Speicher einfach in nem Array jedes Feld was verändert wurde also zugehörige x und y position und den alten Inhalt.


Um nur die Veränderung zu speichern müsste ich doch die Arrays vergleichen. Gibt es dafür einen Befehl?

ChAoS|DrAgOn hat Folgendes geschrieben:

Was er da von nicht Speichern sondern im RAM behalten sagt, finde ich grad etwas fehl am Platze, denn wie du schon sagtest speicherst du ja eh alles in ein Array was ja dann im RAM ist und nicht auf der Platte! o_O (<= habt ihr ja grade selber geklärt sorry Embarassed )


Bis jetze habe ich es mit write/read gemacht, also richtig gespeichert. Und das mit 10 undo-schritten. Wenn die Karte dann 500x500 Felder hat, dann hat der PC ganz schön zu rechnen.

Rongo Matane

BeitragMo, Jun 04, 2007 18:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Backbuffer hat Folgendes geschrieben:

Um nur die Veränderung zu speichern müsste ich doch die Arrays vergleichen. Gibt es dafür einen Befehl?


Nein, die Arrays musst du nicht vergleichen. Du kannst doch einen "Änderungsarray" erstellen, wo zB max 10 nderungen speicherst. Wie oben beschrieben musst der Array mit den Änderungsdaten gefüllt werden. Ich nehm einfach mal als Beispiel wenn du in dem Mapeditor ein Tile veränderst, zB Gras zu Wasser. Da brauchst du lediglich beim ändern (also beim mausklick) zu speichern, dass es Gras war und den Ort, also die X/Y Koordinaten. Außerdem wäre eine Art Index noch praktisch, damit du weißt welcher Schritt das nu war, also der vorletzte oder wie auch immer^^

Das ist bedeutend weniger Aufwand.
 

Lador

BeitragMo, Jun 04, 2007 18:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Bis jetze habe ich es mit write/read gemacht, also richtig gespeichert. Und das mit 10 undo-schritten. Wenn die Karte dann 500x500 Felder hat, dann hat der PC ganz schön zu rechnen.


Da würde ich dir vorschlagen, dass du immer nur den aktuellen Bildschirm zeichnen lässt, statt 500x500, das ist um einiges schneller (falls dir das jetzt weiterhilft^^).

MFG Lador

skey-z

BeitragMo, Jun 04, 2007 18:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Um nur die letzten änderungen zu speicher:

undo$(x) = str$(x-pos + "," + y-pos + "," + alt_index + "," + neu_index)

Also einfach ein Stringarray erstellen mit der vorher festgelegten Anzahl an Einträgen. Oder in einem Type, da kannst du dann theoretisch so viele undos/redos machen wie es der Speicher zulässt.
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group