Grafischer Zeitbalken und Pausemodus

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Jamagin

Betreff: Grafischer Zeitbalken und Pausemodus

BeitragSa, Aug 03, 2013 10:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe in meinem Projekt einen grafischen Zeitbalken eingebaut (Timergesteuert) und habe nun das Problem, wenn man in den Pausemodus geht und nach einer gewissen Zeit das Spiel wieder weiterspielt, wird vom grafischen Zeitbalken mehr abgezogen. Wie kann ich das machen, dass der Zeitbalken, wenn dieser angehalten wird von dort weiterläuft ab derer Position dieser angehalten wurde.

Die Funktionen die diesen steuern sind jene:

Beim ersten Mausklick ins Spielfeld wird der Timer gestartet mit

Code: [AUSKLAPPEN]

If TIMETOGO = 0
   TIMETOGO = 1
   fulltimer = millisecs()
endif


In der Spielschleife rufe ich alle millisecs() + 1000 die Funktion update_Timeline() auf.

In der Initialisierung erstelle ich den grafischen Zeitbalken mit

Code: [AUSKLAPPEN]

total_time_measure = zeit_min * 60000
fulltime = HUD_CreateImage (ObjectID, xpos, ypos, clip_x, clip_y, clip_w, clip_h)


Und die Update Funktion sieht so aus:

Code: [AUSKLAPPEN]

Funktion updateTimeline()
   elapsed_time = millisecs() - fulltimer
   current_length = (fullheight * (total_time_measure - elapsed_time)) / total_time_measure
   HUD_ChangeImageSize (fulltime, current_length, clip_h)
End Function


Wenn man nun den Pausemodus aufruft setze ich TIMETOGO auf 0 und wenn man den Pausemodus wieder verlässt, setze ich TIMETOGO auf 1.
Nun wird aber, da fulltimer = millisecs() beim ersten Klick ins Spielfeld initialisiert wurde, in der Funktion updateTimeline() von der elapsed_time abgezogen, trotz Pausemodus, weil ich ja in der Initialisierung die Windowszeit hergenommen habe. Dadurch das das Spiel im Pausemodus angehalten wird, jedoch die Windowszeit weiterläuft, stimmt das dann mit der Grafik des Zeitbalkens und der Berechnung nicht mehr zusammen!

Hat da jemand eine Idee wie ich die Zeit des Pausenmodus berücksichtigen kann, damit auch der grafische Zeitbalken richtig funktioniert?

Ich weiß, ich habe das jetzt kompliziert erklärt, doch hoffe ich das es jemand verstanden hat wie das gemeint ist!

Jamagin
Bevor du etwas neues beginnst, erledige das alte
 

Kruemelator

BeitragSa, Aug 03, 2013 10:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du in die Pause Wechselst merkst du die die "elapsed_time". Wenn du die Pause verläst setzt du fulltimer zu:
BlitzBasic: [AUSKLAPPEN]
fulltimer = MilliSecs() + elapsed_time

Jamagin

BeitragSa, Aug 03, 2013 11:07
Antworten mit Zitat
Benutzer-Profile anzeigen
@Kruemelator,

danke für deine schnelle Antwort. Das klappt ganz gut mit deiner Idee, jedoch ist da der Zeitbalken wieder komplett gefüllt und das soll er aber nicht! Sad

Jamagin
Bevor du etwas neues beginnst, erledige das alte

Midimaster

BeitragSa, Aug 03, 2013 11:21
Antworten mit Zitat
Benutzer-Profile anzeigen
wäre nicht auch....
BlitzBasic: [AUSKLAPPEN]
fulltimer = fulltimer + elapsed_time

...möglich?
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
 

Kruemelator

BeitragSa, Aug 03, 2013 11:30
Antworten mit Zitat
Benutzer-Profile anzeigen
@Midimaster:
Nein das würde nicht gehen, denn es wird nicht die länge der Pause berücksichtigt.

@Jamagin:
Mein Fehler, müsste so sein:
BlitzBasic: [AUSKLAPPEN]
fulltimer = MilliSecs() - elapsed_time

Jamagin

BeitragSa, Aug 03, 2013 11:31
Antworten mit Zitat
Benutzer-Profile anzeigen
@Midimaster,

nö, da wäre der Wert ja noch größer der abgezogen wird. In der Initialisierung setze ich ja fulltimer = millisecs()
Ich bin jetzt soweit, daß ich sämtliche Variablen am Stopwert halten kann, jedoch die current_length wird weitergerechnet und da ist das Problem. Das komische ist aber, da ich auch einen Zeitstopper dabei habe wo die Zeit während des Spieles 20 Sekunden angehalten wird. Da habe ich dann fulltimer = fulltimer + 20000 als Beispiel und das klappt aber! Nach Ablauf der 20 Sekunden läuft der grafische zeitbalken genau da weiter wo dieser eben angehalten wurde. Ich habe auch schon versucht in der Pauseroutine einen Zeittimer mitlaufen zu lassen und diese Zeit dann dazugerechnet. Geht aber nicht!

Das verstehe ich nicht!


Jamagin
Bevor du etwas neues beginnst, erledige das alte

Xeres

Moderator

BeitragSa, Aug 03, 2013 13:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Merke dir, wie weit der Timer schon abgelaufen ist, und starte den Timer neu mit der, seit der Pause verstrichenen Zeit:
BlitzBasic: [AUSKLAPPEN]
If Pause Then
; Zeige "PAUSE" an

If KeyHit(KEY_P) Then
;*Pause aus
FlushKeys()
Pause = False
;* Resette den Timer und addiere die schon vertrichene Zeit:
fulltimer = ms + fulltimer_elapsed_time
EndIf
Else
; Update das Spiel

If KeyHit(KEY_P) Then
;*Pause ein
FlushKeys()
Pause = True
;* Berechne, wie viele ms schon verstrichen sind, wenn die Pause beginnt:
fulltimer_elapsed_time = fulltimer - ms
EndIf
EndIf
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Jamagin

BeitragSo, Aug 04, 2013 10:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für eure Tipps!

Ich habe es so lösen können!

Vor dem Funktionsaufruf habe ich einfach

Code: [AUSKLAPPEN]

ms1 = millisecs()
pe_pausemodus()
fulltimer = fulltimer + (millisecs()-ms1)


Mann, eh so einfach aber ich hab es echt nicht geschnallt! Anstelle von pe_pausemodus() kann auch pe_Beenden() stehen, überall wo das Spiel angehalten wird muß ich das berücksichtigen!!!

Jamagin
Bevor du etwas neues beginnst, erledige das alte

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group