Spielstand speichern
Übersicht BlitzBasic Beginners-Corner
Rob_Betreff: Spielstand speichern |
Di, Okt 05, 2004 2:51 Antworten mit Zitat |
|
---|---|---|
Hi mir gehts total mies!
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 |
Di, Okt 05, 2004 3:07 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_ |
Di, Okt 05, 2004 14:32 Antworten mit Zitat |
|
---|---|---|
, ok.
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_ |
Di, Okt 05, 2004 14:35 Antworten mit Zitat |
|
---|---|---|
Sorry habs vergessen zu fragen, wenn ich jetzt also einen spielstand speichere, muss ich dann wenn ich gegner habe jeder position von den gegnern auch speichern? | ||
Jan_Ehemaliger Admin |
Di, Okt 05, 2004 14:36 Antworten mit Zitat |
|
---|---|---|
ambesten, du benutzt für alle Zahlen writefloat und für alle Srings writeline | ||
between angels and insects |
David |
Di, Okt 05, 2004 14:46 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 |
Di, Okt 05, 2004 14:52 Antworten mit Zitat |
|
---|---|---|
ja, die beste ist es nciht, aber für ihn die einfachste | ||
between angels and insects |
David |
Di, Okt 05, 2004 14:55 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_ |
Di, Okt 05, 2004 15:05 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 |
Di, Okt 05, 2004 15:10 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_ |
Di, Okt 05, 2004 16:11 Antworten mit Zitat |
|
---|---|---|
Hi hier ich habe mal ein test gemacht aber bei readfile kommt too many parameters habe ich bei read file was fasch gemacht?
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_ |
Di, Okt 05, 2004 16:23 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 |
Di, Okt 05, 2004 17:02 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 |
Di, Okt 05, 2004 17:04 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_ |
Di, Okt 05, 2004 17:10 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 |
Di, Okt 05, 2004 17:13 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_ |
Di, Okt 05, 2004 18:20 Antworten mit Zitat |
|
---|---|---|
Hmm, naja ich werde dann mal weiter üben, vielleicht habe ich einfach das mit der x,z position falsch gemacht.
Mal sehen. Trozdem danke für die tipps und hilfe! Mfg Rob_ |
||
Jolinah |
Di, Okt 05, 2004 18:46 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_ |
Di, Okt 05, 2004 18:55 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 |
Di, Okt 05, 2004 19:48 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 BlitzBasic Beginners-Corner
Powered by phpBB © 2001 - 2006, phpBB Group