Spielstand speichern
Übersicht

![]() |
Rob_Betreff: Spielstand speichern |
![]() Antworten mit Zitat ![]() |
---|---|---|
![]() Ich kriege es einfach nicht hin, ![]() Sagt mir mal wie ich eine ganz einfache spielstand speicherung mache. Ich weiß gar nicht welchen befehl ich nehemen muss oder so. Ich will in 3d halt eine die position und so speichern. Muss ich writebytes oder wiritybyte oder ![]() Sagt mal wie ich anfangen soll. Mfg Rob_ |
||
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: ;Datei öffnen zum reinschreiben = WriteFile ;Falls sie schon existiert wird sie mit WriteFile überschrieben. file_handle = WriteFile("speicherstand.sav") ;In Datei schreiben ;Je nach Datentyp den richtigen Befehl verwenden. ;Für komma Zahlen Float, für Integer Int für einzelne Bytes byte usw. WriteFloat(file_handle,x#) WriteFloat(file_handle,y#) WriteFloat(file_handle,z#) WriteString(file_handle,"Bla") ;Datei schliessen CloseFile(file_handle) Das auslesen ist identisch, verwende dann einfach ReadFile oder OpenFile und zum auslesen der einzelnen Werte ReadFloat(file_handle), ReadInt(file_handle) usw. Wichtig ist beim auslesen das du in der selben reihenfolge ausliest wie du reingeschrieben hast ![]() Und schon hast du dein eigenes Dateiformat gegründet. |
||
![]() |
Rob_ |
![]() Antworten mit Zitat ![]() |
---|---|---|
![]() Also float hast du jetzt genommen weil du die position vom spieler x,y,z gespeichert, Oo, gut! Da kommen wir der sache schon viel näher, danke! Und was kann ich mit WriteString speichern, und brauche ich das? Und wofür brauche ich writebyte? Was kann ich damit speichern? __________________________________________________________ Sagt mir wenn ich es falsch verstanden habe aber: Wenn ich eine 3d position von meinem spieler speichern will muss ich mit "WRITEFLOAT" für jede position x,y,z speichern. Und wenn ich (habs jetzt nicht ausprobiert) einen Highscore speichern will. Dann hae ich ja eine Var, die heist "score" und wenn ich die speichern will dann muss ich glaube ich: Code: [AUSKLAPPEN] score_save=writefile
writeint(score_save,score) closefile(score_save) Das so machen? ![]() Wenn ja dann glaube ich hab ichs etwas begriffen und kann mich endlich mit der OnlineHilfe auseinandersetzten(die ich nicht so verstanden habe). Könnt ihr nicht mal aufschreiben welche "write(float .ect)..." zu speichern geeignet ist? Mfg Rob |
||
![]() |
Rob_ |
![]() Antworten mit Zitat ![]() |
---|---|---|
![]() |
||
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
ambesten, du benutzt für alle Zahlen writefloat und für alle Srings writeline | ||
between angels and insects |
David |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi!
Nö, das is nicht die beste Lösung, Jan_. @Rob_: Genau, du mußt für jeden Gegner die Positionen speichern, sonst stimmen die Positionen beim nächsten spielen natürlich nichtmehr... Weist du was Datentypen sind? Denn dann klärt sich auch die Frage wozu du WriteByte, WriteString, WriteInt usw brauchst. Wenn du z.B. sicher bist, das eine Variable nicht über einen Wert von 255 hinausgeht kannst du den Wert mit WriteByte speichern. Somit sparst du 3 Byte ein, usw... grüße |
||
http://bl4ckd0g.funpic.de |
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
ja, die beste ist es nciht, aber für ihn die einfachste ![]() |
||
between angels and insects |
David |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi!
Stimmt, aber Rob_ kann sich ja auch ein wenig reinhängen oder? Dann lernt er evtl gleich noch einige wichtige Dinge dazu! ![]() grüße |
||
http://bl4ckd0g.funpic.de |
![]() |
Rob_ |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi ja das ist richtig David, danke für die schnellen antworten ![]() So jetzt werde ich mal etwas rumprobieren. Und das mit dem Writebyte um etwas speicher zu sparen lass ich erstmal sonst depremirt es mich und ich es sein ^^. |
||
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Da du ne Liste wolltest:
Code: [AUSKLAPPEN] Zahlen 0 bis 255 -> WriteByte Allgemeine ganze Zahlen (negativ und positiv) -> WriteInt Kommazahlen -> WriteFloat Strings -> WriteString Wenn du nur so Text usw. in mehreren Zeilen speichern willst, wie eine *.Txt Datei zum Beispiel: String mit abschliessendem Zeilenumbruch -> WriteLine |
||
![]() |
Rob_ |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi hier ich habe mal ein test gemacht aber bei readfile kommt too many parameters ![]() Code: [AUSKLAPPEN] Function save() save=WriteFile("save01.sav") WriteFloat(save,x#) WriteFloat(save,z#) CloseFile(save) End Function Function load() load=OpenFile("save01.sav") ReadFloat(save,x#) ReadFloat(save,z#) CloseFile(load) End Function |
||
![]() |
Rob_ |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe den code jetzt etwas geändert ich habe nicht die position vom player in x,z angegeben, jetzt hab ichs gemcht aber es kommt wieder der fehler ![]() Code: [AUSKLAPPEN] Graphics3D 800,600,32,2
SetBuffer BackBuffer() x=24 z=34 light=CreateLight() RotateEntity light,0,0,0 camera=CreateCamera() PositionEntity camera,26,10,30 TurnEntity camera,90,0,0 Global player=LoadMesh("player.b3d") PositionEntity player,x,0,z ScaleEntity player,0.1,0.1,0.1 plane=CreateTerrain(64) PositionEntity plane,-15,0,-15 tex=LoadTexture("kacheln.jpg") EntityTexture plane,tex While Not KeyHit(1) If KeyHit(63) Then save() If KeyHit(64) Then load() If KeyDown(200) Then MoveEntity player,0,0,.1 If KeyDown(208) Then MoveEntity player,0,0,-.1 If KeyDown(203) Then MoveEntity player,-.1,0,0 If KeyDown(205) Then MoveEntity player,.1,0,0 UpdateWorld RenderWorld Text 0,0,"PosX: "+EntityX(player) Text 0,12,"PosX: "+EntityZ(player) Flip Wend End Function save() save=WriteFile("save01.sav") WriteFloat(save,x#) WriteFloat(save,z#) CloseFile(save) End Function Function load() OpenFile("save01.sav") ReadFloat(x#) ReadFloat(z#) CloseFile(SAVE) End Function |
||
David |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi!
Du musst bei ReadFloat als Parameter den Stream übergeben. Den Wert bekommst du als Rückgabe der Funktion! grüße |
||
http://bl4ckd0g.funpic.de |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
onlineHilfe hat Folgendes geschrieben: Wert#=READFLOAT# (Stream)
Fällt dir was auf, Rob? Die Lesebefehle haben einen Rückgabewert und einen Stream aus dem Sie lesen. Lies nochmal in der OH nach, dann wird es sicher klarer für dich ![]() |
||
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 |
![]() |
Rob_ |
![]() Antworten mit Zitat ![]() |
---|---|---|
Naja in der OH, steht das:
Code: [AUSKLAPPEN] Function load()
load=ReadFile("save01.sav") wert#=ReadFloat#(load) CloseFile(load) End Function (also in meinen geändert) Aber nichts geht ![]() |
||
David |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi!
Doch, das was da steht stimmt... Code: [AUSKLAPPEN] Function load() [b]load[/b]=ReadFile("save01.sav") wert#=ReadFloat#([b]load[/b]) CloseFile(load) End Function grüße |
||
http://bl4ckd0g.funpic.de |
![]() |
Rob_ |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmm, ![]() Mal sehen. Trozdem danke für die tipps und hilfe! Mfg Rob_ |
||
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] x# = 10.0 z# = 20.0 stream = WriteFile("bla.sav") WriteFloat(stream,x#) ;X reinschreiben WriteFloat(stream,z#) ;Z reinschreiben CloseFile(stream) stream = ReadFile("bla.sav") a# = ReadFloat(stream) ;Einen Float auslesen und in a speichern b# = ReadFloat(stream) ;Den nächsten Float auslesen und in b speichern CloseFile(stream) Print "Der Ausgelesene X Wert ist: " + a# Print "Der Ausgelesene Z Wert ist: " + b# WaitKey() End Hoffe das Hilft dir weiter. Zum schreiben musst du den Dateistream angeben und was du schreiben willst. Zum auslesen musst du nur noch den Dateistream angeben und die Funktion liefert den ausgelesenen Wert zurück denn du dann irgend in einer Variable speichern kannst. |
||
![]() |
Rob_ |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jolinah ich habs so gemacht wie du gesagt hast, er erstellt eine datei nur läd er die position nicht mehr ![]() Code: [AUSKLAPPEN] If KeyHit(63) Then save()
If KeyHit(28) Then load() Text 0,0,"PosX: "+EntityX(player) Text 0,12,"PosX: "+EntityZ(player) Flip Wend End Function save() stream=WriteFile("save01.sav") WriteFloat(stream,x#) WriteFloat(stream,z#) CloseFile(stream) End Function Function load() stream=ReadFile("save01.sav") x#=ReadFloat#(stream) z#=ReadFloat#(stream) CloseFile(stream) End Function |
||
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Da du es in einer Funktion machst muss x# und z# als Global definiert sein. Oder du speicherst statt x und z auch wie beim Print mit Hilfe der 3d Funktionen die Position, also mit EntityX und EntityZ
Und nachdem es geladen ist muss natürlich die Player Position noch gesetzt werden: Code: [AUSKLAPPEN] PositionEntity player,x#,0,z#
|
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group