[Monkey] IO Funktionalität

Übersicht Andere Programmiersprachen Beginners-Corner

Neue Antwort erstellen

 

BBPro2

Betreff: IO Funktionalität

BeitragFr, Aug 17, 2012 5:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

hat schon jemand ne Möglichkeit gefunden unter HTML5 einfache Dateien zu laden/speichern ?
Ich habe bei meiner Suche nur das Modul ioPlus gefunden, welches nur XNA, Android, GLFW
unterstützt und auch seit Monaten kein update mehr rausgebracht hat.

Es kann doch nicht sein dass so etwas elementares wie speichern und laden von Daten nicht
unterstützt wird oder ?
Wie soll man dann Level laden, Spielstände speichern, etc. ?

Für eine Highscore mag Load/SaveState ja noch genügen, aber das wars dann auch schon :/

Danke im Voraus
lg BBPro2

Noobody

BeitragFr, Aug 17, 2012 9:33
Antworten mit Zitat
Benutzer-Profile anzeigen
BBPro2 hat Folgendes geschrieben:
Es kann doch nicht sein dass so etwas elementares wie speichern und laden von Daten nicht unterstützt wird oder ?

Das kann es! JavaScript kann nicht auf das lokale Filesystem zugreifen - zum Glück! Ich will nicht, dass komische Websites beliebig Daten bei mir speichern oder lesen können.

HTML5 hat seit neuem eine FileSystem/Reader/Writer API, welche in eine lokale Sandbox schreiben kann, allerdings wird diese erst im Chrome unterstützt. Alternativ kann man mit gewissen Umwegen dem Benutzer einen Downloaddialog anbieten, wo er vom Script generierte Daten speichern will, aber das ist wohl nicht, was du suchst.

Spielstände speichern bekommst du je nach dem noch über Cookies hin, aber ich bin nicht sicher, was Monkey da alles unterstützt. Aber ich bin zugegebenermassen kein WebDev, daher gibt es vielleicht andere Möglichkeiten - oder du musst halt deinen Ansatz überdenken.
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun
 

BBPro2

BeitragFr, Aug 17, 2012 18:46
Antworten mit Zitat
Benutzer-Profile anzeigen
mir würds ja schon reichen wenn ich die daten aus dem /data/ ordner lesen könnte ^^
und da spricht eigentlich auch nix gegen aus sicherheitsgründen Sad

Midimaster

BeitragSa, Aug 18, 2012 2:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Also...

grundsätzlich musst Du zwischen Daten, die Du als Entwickler mitsendest und Daten, die während des Benutzens des Spiels durch den Spieler entstehen, unterscheiden.

Die Daten, die Du mitsendest, kanns Du doch ganz einfach als "Daten.txt" in das .data-Verzeichnis des jeweiligen Projektes reinkopieren und im Spiel einfach mit...
BlitzMax: [AUSKLAPPEN]
Local DatenBrei$=LoadString("Daten.txt")

...laden. Dann zerlegst Du die Daten mit eigenen Code nach Lust und Laune. Denkbar wären Komma-separierte Daten oder eine INI-Datenstruktur. Das bleibt Dir überlassen. Du kannst dies mit beliebig vielen Dateien pro Game machen.



Daten, die durch den User entstehen, packst Du zunächst in einen String UserBrei$ und kannst den mit der Anweisung...
BlitzMax: [AUSKLAPPEN]
SaveState UserBrei

...sichern. Wie er im Filesystem der Sandbox heißt und wo er sich befindet, bleibt Geheimnis des jeweiligen Targets. Laden lässt er sich jedenfalls problemlos wieder über:
BlitzMax: [AUSKLAPPEN]
UserBrei=LoadState()

zum Beispiel beim nächsten Start der App wird so der Spielstand der letzten Sitzung wiederhergeholt.

Auch hier ist es Dir überlassen, wie Du die Daten im dem String UserBrei$ organisierst. Anders als bei LoadString() kann man auf diese Art aber nur einen String pro Game abspeichern. Es müssen also alle Daten rein.
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
 

BBPro2

BeitragSa, Aug 18, 2012 3:59
Antworten mit Zitat
Benutzer-Profile anzeigen
SaveState und LoadState sind ja wie gesagt für das Speichern noch halbwegs geeignet.
Level einlesen kann ich damit aber nicht, da ich sie vorher ja erstmal speichern müsste.

Auch LoadString und SaveString kenne ich - die sind ja auch wunderbar...
aber eben nicht für HTML5 - und genau darum geht es ja.

LoadString ist aus dem Modul os
Das Modul os ist nur für glfw und stdcpp targets verfügbar

Inwieweit hilft mir das also weiter ?

Wenn ich eine Datei "Level1.dat" in den data Ordner packe und dann die Zeile
Print LoadString ("Level1.dat") in den Code schreibe
und für HTML5 compiliere bleibt der Bildschirm leer.

Midimaster

BeitragSa, Aug 18, 2012 9:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Das stimmt nicht:

LoadString() gibt es im Modul "OS", steht aber auch ganz normal unter "Mojo" zur Verfügung und läuft damit auf allen Targets!

Ich lade damit das Handbuch von Duett (Klick auf Midimaster-Logo): http://www.monkeycoder.co.nz/C...app_id=182

Quellcode:

BlitzMax: [AUSKLAPPEN]
Class Duett
Field Manual$
....
Method OnCreate%()
Manual=LoadString("Manual.txt")
.....
Method OnRender%()
DrawText "Manual=" + Manual,10,30
.....


"Print" funktioniert bei mir gar nicht! Gibt es den Befehlt überhaupt?

LoadString kann nur ASCII-Texte, keine Binär-Dateien. Man muss also entweder vorher die Daten in eine Ascii-Textform bringen, oder die Binärdatei nach dem Laden Byte für Byte umkodieren.
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
 

BBPro2

BeitragSa, Aug 18, 2012 9:38
Antworten mit Zitat
Benutzer-Profile anzeigen
also bei mir gehts nicht, ich hab aber auch die Demoversion (v45 oder so...)
Vielleicht (hoffentlich!- Vollversion kommt nämlich bald ^^) liegt es daran.

Den Befehl Print gibt es bei mir. Er zeigt in HTML5 konsolenartig die outputs
unterhalb des Zeichencanvas an

edit: ok es geht doch !!!!!! Very Happy
es geht nicht immer, kommt drauf an wo man das LoadString und den Output platziert.
aber es geht.
dass nur Daten gelesen werden können die in einen String passen ist natürlich doof, aber
da lassen sich ja wenigstens workarounds finden.

Vielen Dank für die Hilfe auf jeden Fall, habs jetzt mehr oder minder gebacken beommen ^^

Midimaster

BeitragSa, Aug 18, 2012 9:59
Antworten mit Zitat
Benutzer-Profile anzeigen
da würde mich jetzt noch interessieren, warum genau es manchmal nicht ging....

wie meinst Du das mit "kommt drauf an, wo..."?
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
 

BBPro2

BeitragSa, Aug 18, 2012 11:50
Antworten mit Zitat
Benutzer-Profile anzeigen
also habs jetzt nicht genau untersucht, auf einmal gings und vorher gings definitiv nicht Wink

ich glaube es geht nur wenn ich

- die LoadString in einer App-Klasse verwende (also nicht in der Main-Funktion z.b.)
- den Print Befehl in die OnRender schreibe (sonst wird er vermutlich einfach gar nicht ausgeführt oder direkt wieder überschrieben)

hatte vorher andere Anätze weil ich übermüdet war und zu wenig nachgedacht hatte. Also vermutlich
eher mein Fehler als der von Monkey ^^

im übrigen können auch "binäre Daten" eingelesen werden. Also es gibt keine Restriktionen auf den
Inhalt der Dateien. Die einzige Bedingung scheint zu sein, dass die Datei auf .txt endet
(recht sinnlose Restriktion und irgendwie ein wenig nervig, aber ok ^^)
Da es ja mir überlassen bleibt wie ich die Dateien nenne ist das also keine echte Einschränkung.
Es sieht nur sch***e aus im Verzeichnisbaum wenn ein Level als txt gespeichert ist usw.

Aber auch wenn die Textdatei aus ASCII Codes jenseits der Grenzen 32 und 128 besteht werden diese
wunderbar mit LoadString eingelesen und können verarbeitet werden.

Ergo: LoadString reicht vollkommen aus um Level usw. zu laden, man muss diese nur auf .txt enden lassen

Neue Antwort erstellen


Übersicht Andere Programmiersprachen Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group