Laden des Strings

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Milchshake
Beiträge: 166
Registriert: 30.01.2006 17:47
Wohnort: Zwischen dem Sessel und dem Computer

Laden des Strings

Beitrag 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:
Hab jetzt PB 4.02
Muhahaha!!!!
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag 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
Zuletzt geändert von #NULL am 20.08.2006 12:10, insgesamt 1-mal geändert.
my pb stuff..
Bild..jedenfalls war das mal so.
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Beitrag 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
Benutzeravatar
roherter
Beiträge: 1407
Registriert: 10.04.2005 18:58
Kontaktdaten:

Beitrag 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:
Purebasic 5.0 32bit und 64 bit

I'm back from hell
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag 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]
Zuletzt geändert von #NULL am 20.08.2006 12:16, insgesamt 1-mal geändert.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
Milchshake
Beiträge: 166
Registriert: 30.01.2006 17:47
Wohnort: Zwischen dem Sessel und dem Computer

Beitrag von Milchshake »

danke für die schnellen antworten,bin jetzt ein ganzes stück weiter
Hab jetzt PB 4.02
Muhahaha!!!!
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Beitrag 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^^
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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. ;)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Alves
Beiträge: 1208
Registriert: 19.04.2006 18:24
Kontaktdaten:

Beitrag von Alves »

Außerdem muss das FlipBuffers() immer nach allen Zeichenoperationen kommen, wie schon in roherters Code gesehen.
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag 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.
my pb stuff..
Bild..jedenfalls war das mal so.
Antworten