Text im Graphikmodus bei B+
Übersicht

![]() |
bmurrayBetreff: Text im Graphikmodus bei B+ |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
nachdem ich nun stundenlang rumprobiert habe, weiß ich nicht mehr weiter, und hoffe, dass mir hier jemand helfen kann ![]() Ich möchte einen Fußball-Manager programmieren, komme aber jetzt zum ersten Mal nicht mehr wirklich weiter. Es geht einfach nur um die Anzeige von Ereignissen während des Spiels. Dabei nutze ich die Repeat/Forever-Schleife um die Ereignisse zeitlich zu sortieren. Das Problem ist, dass durch den Delay-Befehl zwar die Minutenanzeige korrekt funktioniert, während die Anzeige einer Chance (siehe im Code mein Beispiel) nur für Sekundenbruchteile zu sehen ist, und zwar kurz nach dem das Spiel für eine Sekunde (delay(1000)) angehalten wurde. Der Text ist also nicht für die volle Sekunde zu sehen, sondern blinkt nur kurz auf. Ich habe es schon mit einer For/Next-Schleife probiert, oder mit einem Timer, aber dann friert das Spiel ein. Vielleicht kann mir jemand weiterhelfen, für Ratschläge wäre ich sehr dankbar! Code: [AUSKLAPPEN] Repeat
DrawBlock anstossh,0,0 ;Das Hintergrundbild If start$="nein" Then DrawImage maus,MouseX(),MouseY(); Die Maus wird nur gezeichnet, wenn das Spiel noch nicht angepfiffen wurde font=LoadFont("Arial",50,False,False,False) ; Spielstand SetFont font Color 255,255,255 Text 490,79, th+":"+ta If start$="ja" Then ;Beginn des Ablaufs, nachdem der Spieler die rechte Maustaste gedrückt hat font=LoadFont("Courier",20,False,False,False) SetFont font i=i+1 Text 460,135,i+". Minute" ; Dieser Text läuft wie geplant If i =13 Then ; Dies ist nur ein Beispiel, die Spielroutine kommt noch rein Text 360,160,"Chance für Freiburg" ; Dieser Text blinkt nur kurz auf, anstatt die volle Sekunde dazustehen Delay (1000) EndIf Delay(200) ;Die normale Verzögerung für den Minutenzähler EndIf If i=90 Then WaitMouse : Gosub mainloop ; Bei Spielende geht's mit einem Klick ins Hauptmenü If GetMouse()=2 Then start$="ja" ; Abfrage für rechte Maustaste Flip Forever |
||
![]() |
ZEVS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der Delay![]() ![]() Außerdem: Benutze bitte niemals GoSub ![]() Benutze Timer. Die Variable start könne man wesentlich schneller als Int verwenden, da das Vergleichen von Strings eher langsam ist. ZEVS |
||
![]() |
count-doku |
![]() Antworten mit Zitat ![]() |
---|---|---|
Als Lösung nur für diesen Beispielcode würde es auch reichen zwischen dem Text und Delay befehl noch ein Flip![]() Grundsätzlich hat ZEVS aber natürlich recht, Delay ist immer problematisch, da das Programm angehalten wird. Für eine Geschwindigkeitsbegrenzung nutze CreateTimer ![]() ![]() für Ereignisse die in bestimmten Abständen/für bestimmte Zeiten auftreten: MilliSecs ![]() Oh und man sollte den Font nicht jeden Schleifendurchlauf neu laden Zieht ziemlich viel Resourcen. Lieber vor der Schleife laden und dann nachher nurnoch SetFont ![]() lg, Count-Doku |
||
![]() |
bmurray |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, ich habe schon gelesen, dass man Delay und gosub meiden soll. Gosub war hier nur die "Notlösung", die ich noch ausbessern möchte. Delay ist auch eine sehr unelegante Lösung, das stimmt, nur hat bei all meinen Versuchen delay als einziger befehl bisher so geklappt, wie ich das möchte. Mit Timer und Millisecs kriege ich noch nicht diesen "Fließeffekt" hin, also dass die Minuten langsam runterlaufen; die Minutenanzeige rauscht einfach runter. Ich werde den Code ausbessern, ich krieg das bestimmt noch hin, muss mich einfach noch ein bisschen reinlesen. Danke für eure Anregungen!! | ||
![]() |
count-doku |
![]() Antworten mit Zitat ![]() |
---|---|---|
Habe mal einen kleinen Beispielcode mit der Grundlage deines Codes geschrieben.
Er sollte MilliSecs und Timer veranschaulichen, hoffe er hilft. BlitzBasic: [AUSKLAPPEN] Graphics 800,600,0,2 guten Abend noch, Count-Doku |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
genau hierzu gibt es ein tutorial von mir:
Timer, Millisecs() und zeitliche Abläufe für Anfänger https://www.blitzforum.de/foru...hp?t=34436 Das System ist immer das gleiche: Du speicherst die aktuelle Zeit Millisecs() in eine Variable, zählst dann was dazu und wartest nun, bis diese Variable wieder kleiner als Millisecs() geworden ist: Code: [AUSKLAPPEN] Global MyTime%=Millisecs()+2*1000 ; 2 sekunden, dann wird der text sichtbar
Global OnOffFlag%=0 Repeat Cls If MyTime<Millisecs() MyTime =Millisecs()+ 10*1000; 10sec bis er wieder verschwindet OnOffFlag=OnOffFlag+1 Endif If OnOffFlag=1 ; Display something Endif Flip 1 Until KeyHit(1) In diesem Moment setzt du eine Flag auf 1, dass dann woanders dafür sorgt, dass etwas zu sehen ist. Willst Du, dass dieser Text dann wieder irgendwann verschwindet, addierst Du einfach wieder was zu der Variable,die dann das Flag auf 2 schaltet |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
![]() |
bmurray |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hab's jetzt mit millisecs hinbekommen, super!! @Midimaster. Ja, ich habe dein Tutorial gelesen, hab's aber trotzdem nicht richtig hingekriegt, hab aber jetzt meinen Fehler gefunden. Danke schön!! @Count-Doku: Danke, ich schau mir das gleich mal an!! | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group