ImageTimer

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

N0X

Betreff: ImageTimer

BeitragMo, März 22, 2010 21:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey!
Ich möchte mit Zahlen (in .png geschpeichert) einen Timer erstellen der von 5 auf 1 runterzählt. Ich weiß aber nicht, wie ich die MilliSecs() Sachen einstellen muss.
Wie mache ich das?

Code: [AUSKLAPPEN]
   If dead=1 Then
      disableAllKeys = 1
      ;Text (GraphicsWidth()/2)-78,(GraphicsHeight()/2)-6,"You are dead!"
      DrawImage tot,(GraphicsWidth()/2)-50,(GraphicsHeight()/2)-10
      DrawImage font_5,0,0
      If MilliSecs()-ttime>1000 Then
         DrawImage font_4,0,0
      EndIf
      If MilliSecs()-ttime>2000 Then
         DrawImage font_3,0,0
      EndIf
      If MilliSecs()-ttime>3000 Then
         DrawImage font_2,0,0
      EndIf
      If MilliSecs()-ttime>4000 Then
         DrawImage font_1,0,0
      EndIf
      If MilliSecs()-time>5000 Then
         disableAllKeys = 0
         x# = 0:y# = 0
         dead = 0
      EndIf
   EndIf


Mfg,
N0X
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

M0rgenstern

BeitragMo, März 22, 2010 21:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, du musst Millisecs() übergeben.

Biepsiel:

Code: [AUSKLAPPEN]
If dead = 1 then
       Start = millisecs()
if (Millisecs()-start)> 1000 then . . .

if (Millisecs()-start)>2000 then . . .


Lg, M0rgenstern

N0X

BeitragMo, März 22, 2010 21:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Also so?
Das geht aber noch nicht... da wird nur die 5 angezeigt. Confused

Code: [AUSKLAPPEN]
   If dead=1 Then
      disableAllKeys = 1
      ;Text (GraphicsWidth()/2)-78,(GraphicsHeight()/2)-6,"You are dead!"
      DrawImage tot,(GraphicsWidth()/2)-50,(GraphicsHeight()/2)-10
      ttime = MilliSecs()
      
      DrawImage font_5,0,0
      If MilliSecs()-ttime>1000 Then
         DrawImage font_4,0,0
      EndIf
      If MilliSecs()-ttime>2000 Then
         DrawImage font_3,0,0
      EndIf
      If MilliSecs()-ttime>3000 Then
         DrawImage font_2,0,0
      EndIf
      If MilliSecs()-ttime>4000 Then
         DrawImage font_1,0,0
      EndIf
      ;If MilliSecs()-time>5000 Then
      ;   disableAllKeys = 0
      ;   x# = 0:y# = 0
      ;   dead = 0
      ;EndIf
   EndIf
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

Hubsi

BeitragMo, März 22, 2010 22:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Weil ttime immer wieder neu der Wert von MilliSecs zugewiesen wird. Für das Programm wird also in hundert Jahren noch keine Zeit (rechnerisch) vergangen sein. Das nächste Problem wird werden das zuerst font_5 dargestellt wird, nach einer Sekunde wird über font_5 noch font _4 gepinselt usw. Denn wenn die Differenz größer 2000 ist ist sie auch größer 1000. Du verstehst was ich meine?
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

Hangman

BeitragMo, März 22, 2010 22:40
Antworten mit Zitat
Benutzer-Profile anzeigen
mit anderen worten ttime = millisecs() aus der schleife nehmen(nur einmal zum todeszeitpunkt ausführen)
Ich habe Berthold gebrochen.

N0X

BeitragMo, März 22, 2010 22:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Gut, hab ich verstanden, aber wie kann ich wenn ich "dead=1" ist, etwas nur EINMAL ausführen?

Mfg,
N0X
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

derAtomkeks

ehemals "Sethus"

BeitragMo, März 22, 2010 22:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Du könntest eine weitere Variable einbauen. Nachdem deine Aktion, die du nur einmal ausführen willst, ausgeführt wurde, setzt du sie auf 1, und bevor die Aktion ausgeführt wird, überprüfst du, ob sie schon gesetzt ist:
Code: [AUSKLAPPEN]

If dead = 1 Then
    If Not done Then
        do_anything()
        done = True
    End If
End If


Alternativ könntest du auch nach der Abfrage, ob "dead" gesetzt ist, eine Schleife laufen lassen, aber ich weiß ja nicht, was du im Rest der Hauptschleife noch tust und ob das weiterhin getan werden soll, auch wenn der Spieler tot ist.

N0X

BeitragMo, März 22, 2010 22:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, danke, aber es klappt immernoch nicht.

Code: [AUSKLAPPEN]
   If timeStart = 1 Then
      ttim = MilliSecs()
      timeStart = 0
   EndIf
   
   If dead=1 Then
      timeStart = 1
      disableAllKeys = 1
      DrawImage tot,(GraphicsWidth()/2)-50,(GraphicsHeight()/2)-10
      
      ;DrawImage font_5,0,0
      If (MilliSecs()-ttim)>1000 Then
         DrawImage font_4,0,0
      EndIf
      If (MilliSecs()-ttim)>2000 Then
         DrawImage font_3,0,0
      EndIf
      If (MilliSecs()-ttim)>3000 Then
         DrawImage font_2,0,0
      EndIf
      If (MilliSecs()-ttim)>4000 Then
         DrawImage font_1,0,0
      EndIf
      ;If MilliSecs()-time>5000 Then
      ;   disableAllKeys = 0
      ;   x# = 0:y# = 0
      ;   dead = 0
      ;EndIf
   EndIf
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

derAtomkeks

ehemals "Sethus"

BeitragMo, März 22, 2010 22:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
   
   If dead=1 Then
      If timeStart = 0 Then
          ttim = MilliSecs()
          timeStart = 1
      EndIf
      disableAllKeys = 1
      DrawImage tot,(GraphicsWidth()/2)-50,(GraphicsHeight()/2)-10
       
      ;DrawImage font_5,0,0
      If (MilliSecs()-ttim)>1000 Then
         DrawImage font_4,0,0
      EndIf
      If (MilliSecs()-ttim)>2000 Then
         DrawImage font_3,0,0
      EndIf
      If (MilliSecs()-ttim)>3000 Then
         DrawImage font_2,0,0
      EndIf
      If (MilliSecs()-ttim)>4000 Then
         DrawImage font_1,0,0
      EndIf
      ;If MilliSecs()-time>5000 Then
      ;   disableAllKeys = 0
      ;   x# = 0:y# = 0
      ;   dead = 0
      ;EndIf
   EndIf


Du darfst "timeStart" auch nur setzen, wenn es noch nicht gesetzt ist, und nicht jeden Schleifenfdruchlauf aufs neue Wink

Snade

BeitragMo, März 22, 2010 22:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Probiere es dochmal so:

BlitzBasic: [AUSKLAPPEN]
Function wait(time%)
OldTime = MilliSecs()
While (MilliSecs() < OldTime + time%)
Wend
End Function


Code: [AUSKLAPPEN]
wait(1000)
DrawImage test,50,50
wait(1000)
DrawImage test2,50,100
wait(1000)

usw.

lg. Snade

derAtomkeks

ehemals "Sethus"

BeitragMo, März 22, 2010 23:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Das meinte ich eben mit der Schleife nach der Abfrage. Wink
Aber anscheinend will er, dass in der Hauptschleife weiterhin etwas passiert, der Hintergrund neu gemalt wird oä?

Snade

BeitragMo, März 22, 2010 23:08
Antworten mit Zitat
Benutzer-Profile anzeigen
oh hab wohl nicht aktualisiert hatte deinen Post nicht mehr gelesen Smile

N0X

BeitragMo, März 22, 2010 23:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Jo, hat schon geklappt, danke! Smile
Endlich hab ich nen Respawn-Zähler nach'm Sterben! Laughing

Mfg,
N0X
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

das wurgel

BeitragMo, März 22, 2010 23:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Function wait(time%)
OldTime = MilliSecs()
While (MilliSecs() < OldTime + time%)
Wend
End Function

Da kann man auch gleich Delay nehmen. Außerdem vebraucht das 100% CPU Auslastung.

@nox
Mach das timestart=1 weg und setz es vor die haupschleife und da wo spieler wieder leben soll. Das verhindert, dass das ttim = MilliSecs() jede schleife neu aufgerufen wird.
1 ist ungefähr 3

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group