Zeiteinfluss in functionen
Übersicht

PhillipKBetreff: Zeiteinfluss in functionen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hey Blitzforum ^-^
Hab mich nun auch mal angemeldet xP Also, mein problem ist: ich brauch einen Denkanstoß. Ich schreibe mit Annixa grade ein bissl spasseshalber ein 3D projekt.. Nun gibts diverse sachen wie ein Jump zb, die ich am liebsten mit Zeit schreiben würde.. ATM nutze ich Frames, was annixa aber nicht so mag (für evlt schwächere rechner wo es frameskip geben könnte) - aber darauf gehe ich nicht weiter ein^^ Also... mal ein einfaches beispiel. Spieler drückt leertaste, player entity soll springen. Um das nach möglichkeit Sauber und flüssig zu gestalten brauche ich zeiteinfluss.. Alle 1sekunde zb y = y+1 oderso. Aber meine ansätze klappen irgendwie nicht oO Vor dem beginn der Mainloop wird ein Zeitstamp initialisiert. Start_Time = Millisecs() im mainloop selber wird Current_Time = Millisecs() bestimmt. Die idee ist simpel => Die differenz zwischen Current_time und Start_time ist also die spielzeit. In millisekunden^^ Wenn ich nun eine Funktion schreiben will die 20sekunden lang etwas ausführen soll, wie am besten? o0 Mein ansatz wäre, (grob geschrieben, nicht 1zu1 perfekt geschrieben^^) Test_aktiv = 0 ist eine Global die vorm mainloop auf 0 gesetzt wird ^^ Code: [AUSKLAPPEN] Function Test(firstcall=0) If firstcall=1 Then Sekunden = 20 Test_aktiv = 1 Endif Time_unterschied = Time_current - Start_time *rausfinden ob seit dem letzten durchgang eine sekunde vergangen ist? :(* If Eine sekunde vergangen Then Sekunden = Sekunden-1 *das machen, was auch immer die funktion tun soll^^* Endif If Sekunden<0 Then Test_aktiv = 0 End Function und im mainloop noch eine "If Test_aktiv = 1 Then Test()" reinhaun.. Soweit die grobe idee ^^ Nun zu euch, ist mein ansatz wenigstens richtig? :> Was könnte ich zu weniger zeilen zusammenschreiben, was könnte ich stattdessen nehmen, und wie zur hölle führ ich eine funktion einmal pro frame aus, aber sie soll nur jede sekunde etwas tun? ![]() Ansonsten wollt ich noch sagen: Schön das es ein Deutschsprachiges Forum zu Blitz3D gibt ![]() Ich bin kein direkter noob im proggen.. nur in Blitz3d binsch doof ![]() ![]() Ich hoffe auf antworten^-^ |
||
![]() |
Smily |
![]() Antworten mit Zitat ![]() |
---|---|---|
du hast die lösung doch schon selbst geschrieben.
Du musst einfach 1 sekunde "stoppen" Wenn es losgeht, setzt du eine variable auf den zeitwert. Dann kannst du prüfen, wieviel zeit schon vergangen ist. Code: [AUSKLAPPEN] lasttick = millisecs() Repeat if millisecs() - lasttick > 1000 Print "Eine Sekunde ist vergangen" lasttick = millisecs() ;alternativ auch lasttick=lasttick+1000, wenn du wirklich genau einen sekündlichen tick garantieren willst. Ansonsten wirst du immer 1-2 millisekunden drüber sein. end if until keyhit(1) |
||
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets "Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!" stummi.org |
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke für die schnelle antwort ![]() Ich tue es mir selbst manchmal schwer und denke zu komplex... Repeat ist in diesem fall die Mainloop? Also zusammgenfasst brauche ich nur eine Abstandsvariable, die allderdings nicht "1000" enthält, sondern immer Current_Time+1000 ?.. und die Funktion überprüft ob Current_time > Abstandsvariable ist und führt diese aktion dann aus.. Aaaah das gibt sinn ![]() Kleine frage am rande, gibt es einen operator für "größer-gleich" bzw "kleiner-gleich"? ich kannte das immer nur als a>=b bzw a<=b ^^ Was bei B3d allerdings nicht klappte xD und ständig mit a=b OR a<b zu arbeiten nervt mich =) |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kleiner gleich oder größer gleich kann man sowohl "=>" als auch ">=" (bzw. "=<" und "<=") schreiben, dass macht keinen Unterschied. | ||
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Xeres hat Folgendes geschrieben: Kleiner gleich oder größer gleich kann man sowohl "=>" als auch ">=" (bzw. "=<" und "<=") schreiben, dass macht keinen Unterschied.
Als ich das das letzte mal versucht habe gings nicht o.o Okay... Mein Zeitkrams funktioniert btw ![]() Ich werds gleich irwann mal zusammenraffen und als rohling zur verfügung stellen, falls jmd das selbe vorhat ^^ |
||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich verwende dafür immer die "Schleifenzeit", also die länge einer Schleife in Millisekunden:
(in Meinem Beispiel teile ich die Millisekunden noch durch 10 ![]() Zitat: msc#=0.0
SchleifenZeit#=0.0 While 1=1 msc#=MilliSecs() [BLA BLA...] SchleifenZeit#=(MilliSecs()-msc#)/10 Wend Eine Variable wie die Geschwindigkeit eines Objektes, oder auch einfache Timer kann man damit gut herstellen. Hier 2 beispiele: Zitat: ;Frameunabhängige Bewegung: MoveEntity Cube,0.1*SchleifenZeit#,0,0 Zitat: ;Frameunabhängiger Timer
Timer#=Timer#+0.1*SchleifenZeit# If Timer>1000 Then mach_was() Ich hoffe, dass ich helfen konnte ![]() Tank EDIT: Warum erwähnst du eigentlich überall, dass du etwas zusammen mit AnniXa machst? ![]() ![]() ![]() |
||
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ehm.. ka xD Kommt doof wenn man von Projekt redet und nix drauf hat :p
Das passiert einfahc so beim schreiben ^-^ Naja.. zu dem zusammengerafften krams, ich hab wohl doch noch irgendwo einen Bug eingefressen den ich erstmal ausmerzen muss.. Ich glaub ich übernehme mit grade etwas mit meiner Zeit+Vorhaben >.< Aber danke an alle, für die antworten ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group