Seite 1 von 2

Laden des Strings

Verfasst: 20.08.2006 11:46
von Milchshake
Hab letztens mal probiert, mich mit den Strings anzufreunden,doch da hab ich ein problem.Hier mal der Code:

Code: Alles auswählen

InitSprite()
InitKeyboard()
InitSound()
;Save File
highscore1 = 100
highscore2 = 50
highscore3 = 10
CreateFile(0, "Highscores.save")
WriteStringN( Str(highscore1)) 
CloseFile(0)
;load File
OpenFile(0,"Highscores.save")
OpenScreen(1024,768,32,"Load")
Repeat 
FlipBuffers()
ExamineKeyboard()
StartDrawing(ScreenOutput())
Locate(100,100)
DrawingMode(1)
FrontColor(250,250,250)
DrawText(ReadString())
StopDrawing()
CloseFile(0)
If KeyboardPushed(#PB_Key_Escape)
End
EndIf 
ForEver 
Das problem:
Der string wird bei mir nur sehr kurz und so flackernd angezeigt!!
Bitte um Hilfe :mrgreen:

Verfasst: 20.08.2006 12:07
von #NULL
wenn du vor der hauptschleife eine datei öffnest, dann schließe sie entweder auch wieder vor der hauptschlaife, oder dannach, aber nicht in jedem frame (das müßte dir der compiler aber doch schon gesagt haben.)

das flackern liegt wahrscheinlich einfach an der datei-operation (readfile in jedem frame), die auch nicht sinnvoll ist. lies' vorher ein was du brauchst, oder aktuallisiere es in der HS nur in bestimmten zeitabständen (timer), aber die datei ständig offen halten und mit dem aktuellen fps auslesen ist nicht gut.

<edit: z.b. so>

Code: Alles auswählen

;...
OpenFile(0,"C:\Highscores.save")
s$=ReadString()
CloseFile(0)
OpenScreen(1024,768,32,"Load")
Repeat
  ;...
  ;...
  DrawText(s$)
  ;...
forever

Verfasst: 20.08.2006 12:09
von a14xerus
Readstring liest immer den nächsten string, der im file steht..
und du scheribst in der schleife jedesmal den string neu..
und immer an die gleiche pos..
lade den string am besten zuerst in eine variable.. und zeige ihn dann an

//edit: #NULL war schneller

Verfasst: 20.08.2006 12:12
von roherter

Code: Alles auswählen

InitSprite()
InitKeyboard()
InitSound()
;Save File
highscore1 = 100
highscore2 = 50
highscore3 = 10
CreateFile(0, "Highscores.save")
WriteStringN( Str(highscore1))
CloseFile(0)


OpenScreen(1024,768,32,"Load")
Repeat
  ClearScreen(0,0,0)
  OpenFile(0,"Highscores.save")
  ExamineKeyboard()
  StartDrawing(ScreenOutput())
  Locate(100,100)
  DrawingMode(1)
  FrontColor(250,250,250)
  DrawText(ReadString())
  StopDrawing()
  CloseFile(0)
  FlipBuffers()
  If KeyboardPushed(#PB_Key_Escape)
    End
  EndIf
ForEver 
Aber ich würde trotzdem anders machen, habe jetzt leider keine Zeit dir zu erklären warum es nicht ging sorry! :freak:

Verfasst: 20.08.2006 12:15
von #NULL
er schreibt in der schleife zwar nicht den string immer neu, aber er liest immer er wieder eine zeile. wenn die datei 3 zeilen enthält, ist das Readstring() ab dem 4 Frame sowieso nutznixlos. es wird dann vermutlich sowie so kein gelesener string mehr mit drawtext angezeigt, sondern nur der alte, ...weil clearscreen is ja auch nich drin..
[one_second]

Verfasst: 20.08.2006 12:15
von Milchshake
danke für die schnellen antworten,bin jetzt ein ganzes stück weiter

Verfasst: 20.08.2006 12:16
von a14xerus
dann wenigstens so:

Code: Alles auswählen

InitSprite() 
InitKeyboard() 
InitSound() 

;Save File 
highscore1 = 100 
highscore2 = 50 
highscore3 = 10 
CreateFile(0, "Highscores.save") 
WriteStringN( Str(highscore1)) 
CloseFile(0) 


OpenFile(0,"Highscores.save") 
string.s = ReadString()  ;vll an pb version anpassen
CloseFile(0) 

OpenScreen(1024,768,32,"Load") 
Repeat 
  ClearScreen(0,0,0) 
  ExamineKeyboard() 
  StartDrawing(ScreenOutput()) 
  Locate(100,100) 
  DrawingMode(1) 
  FrontColor(250,250,250) 
  DrawText(string) 
  StopDrawing() 
  FlipBuffers() 
  If KeyboardPushed(#PB_Key_Escape) 
    End 
  EndIf 
ForEver

solbald du auch die anderen Highscores in die datei speicherst, solltest du vll mit LL's arbeiten.. und die Scores natürlich an verschiedene stelln zeichnen.. is ja klar^^

Verfasst: 20.08.2006 20:01
von Kaeru Gaman
ich frag mich sowieso, wie das erste beispiel funktioniert haben sollte...

schließlich schließt er die datei nach dem ersten lesen, aber das open ist vor dem repeat,
also müsste schon im zweiten frame das readstring nen fehler ergeben.

auf jeden fall liefert es nichts zurück, also wird ein leerer string auf den screen geschrieben.
der zweite buffer ist also leer, auf dem ersten steht aber der text, weil kein clearscreen drin ist,
also flackert es, weil der text auf einem buffer ist auf dem anderen nicht. ;)

Verfasst: 21.08.2006 08:39
von Alves
Außerdem muss das FlipBuffers() immer nach allen Zeichenoperationen kommen, wie schon in roherters Code gesehen.

Verfasst: 21.08.2006 09:12
von #NULL
@alves
das is prinzipiell nicht so wichtig.
hauptsache: ... Draw -> Flip -> Clear -> Draw -> Flip -> Clear ...
an welcher stelle du einsteigst, bzw wo die schleife umbricht is egal.