Waittimer "friert" komplettes Spiel ein?

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

Lukio

Betreff: Waittimer "friert" komplettes Spiel ein?

BeitragSo, Mai 16, 2010 20:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo zusammen, habe schon länger mit Blitz3D ganz kleine Dinge gemacht und mich entschieden BlitzMax anzuschauen, da es OOP zulässt und auch sonst sinnvoller ist (Strict Mode etc.)

Da einiges anders ist, habe ich das Beginners Tutorial von Wave durchgelesen. Nun wollte ich den Asteroids Shooter etwas erweitern, teilweise klappt das ganz gut, nur möchte ich jetzt eine "Nachladen" Funktion haben - wenn ich diese ausführe, friert das ganze Spiel für die Dauer der Repeatschleife ein.

Wenn Ammo=0 dann wird Reload() aufgerufen.
Code: [AUSKLAPPEN]

   Function Reload()
   Local reloadtimer:TTimer=CreateTimer( 10 )
      Repeat
         Ammo:+1
         Reloading=1
         WaitTimer(reloadtimer)
      Until Ammo = 50
         Reloading=0
   EndFunction


Ist das anders lösbar bzw. wie kann man das im Zusammenhang mit WaitTimer vermeiden?
 

Lion

BeitragSo, Mai 16, 2010 20:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Guck dir mal Millisecs() an, das ist es was du brauchst. Die Timer sind zum begrenzen der FPS gedacht
Intel Core 2 Quad 4x2.66 ghz - 4gb ddr2 - nvidia GeForce GTX660 2gb
Intel Atom 1x1.83 ghz - 2gb ddr2 - intel GMA 3150 256mb
AMD A10-5750M 4x2.5 ghz - 8 gb ddr4 - AMD R9 M290x
 

Lukio

BeitragSo, Mai 16, 2010 21:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Sprich sowas wie das?

Code: [AUSKLAPPEN]
Function Reload()
If Not MilliSecs()>GlobalTimer+Reloadtime
Reloading=1
Ammo:+1
Else
Ammo=50
Reloading=0
Endfunction


Habe ja zb. die verschiedenen Schussfrequenzen auch über MilliSecs gelöst, mal schauen.

Bleibt denn das auch so bei umfangreicheren Projekten oder ist es da sinnvoller einen eigenen Zeitimpuls zu machen ?(DeltaTime habe ich schon drin damit alles schön gleichmässig läuft, das kannte ich schon von Blitz3D Wink )

Xeres

Moderator

BeitragSo, Mai 16, 2010 21:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Anstatt überall "händisch" die Timer mit Millisecs rein zu schreiben, verwende ich einen Timer-Type der das automatischer macht.
Zeitimpuls?!
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)
 

Lukio

BeitragSo, Mai 16, 2010 21:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Xeres hat Folgendes geschrieben:
Anstatt überall "händisch" die Timer mit Millisecs rein zu schreiben, verwende ich einen Timer-Type der das automatischer macht.
Zeitimpuls?!


Impulse, Heartbeat, Keepalive es gibt verschiedene Anwendungen und Bezeichnungen.

Anstatt Milliseconds (Laufzeit des PCs) eine Laufzeit die mit Beginn der Ausführung anläuft und zb. dann auch im 10s Takt oder Minutentakt Events auslösen kann. Eventuell geht das ja ganz bequem wenn man den Timer als Type nutzt?

Alle 10s:

Code: [AUSKLAPPEN]
While Impulse(10) = TRUE
Textdraw "10s vorbei",20,20
Bumm()
Wend


Alle 60s:
Code: [AUSKLAPPEN]

While Impulse (60) = TRUE
Textdraw "1 Minute vorbei, 20,20
MehrBumm()
Wend

Xeres

Moderator

BeitragSo, Mai 16, 2010 22:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Das läuft bei mir alles unter dem Begriff Timer - und lässt sich ganz toll mit einem Type verarbeiten.
Codetechnisch aber eher:
Code: [AUSKLAPPEN]
If MeinTimer.Check() Then
Print "Ding!"
End If

Schleifen laufen so lange, bis sie abgebrochen werden - nicht gut für einmalige Events.
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)

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group