[Monkey] IO Funktionalität
Übersicht

BBPro2Betreff: IO Funktionalität |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 "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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 !!!!!! ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
also habs jetzt nicht genau untersucht, auf einmal gings und vorher gings definitiv nicht ![]() 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 |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group