selbsgestalltetes "universal"-Delay
Übersicht

![]() |
pileBetreff: selbsgestalltetes "universal"-Delay |
![]() Antworten mit Zitat ![]() |
---|---|---|
Guten Tag,
hab schon lange keine Fragen mehr gestellt und weil mir neulich was aufgefallen ist, frag ich einfach. Ich hab bisher eigentlich gedacht mit meiner Methode Delays zu programmieren käme ich ganz gut. Mit diesen Delays mache ich zum Beispiel nen blinkenden Coursor und das geht so: Ich hab ne Variable die als Zähler fungiert. Sie fängt bei Null an und wird bei jedem Schleifendurchgang um eins erhöht (Counter=Counter+1) Als nächstes lege ich den Maximalwert fest (z.B. If Counter >=40 then Counter=0) Und dann noch das Verhalten des Coursor. Dieser wird angezeigt wenn der Zähler zwischen Null und Zwanzig ist . (If Counter>=0 and Counter<=21 then Coursor=True). Hoffe das konnte jetzt jeder verstehen. Diese Methode fand ich bisher immer ganz gut, weil sie ziemlich Simpel und flexibel ist. Nun ist mir aber das Problem aufgefallen das dieser Delay auf schwächeren Rechnern viel länger dauert als auf schnelleren, bzw. allgemein auf jedem System verschieden lang ist. Daher ist es auf besonders langsamen Rechnern leider nicht möglich einiges von meinen Spielen anzuwenden. Also meine Frage ist ob man das so wie ich es mache, ein wenig verbessert, auf jedem System laufen lassen kann? Oder gibt es bessere Alternativen die genauso einfach und flexibel sind? Danke! |
||
MfG. Pile
Aktuelles Projekt: Irgendwas in den BlitzEditor eintippen und sehen ob was dabei rauskommt. Fortschritt: ca. 3.141592653589793238% |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wenn es unabhängig von der Rechnergeschwindigkeit ist, gibt es zwei Möglichkeiten:
1. Du zählst den Counter mit einer FPS abhängig Variable hoch 2. Du rechnest mit Unterschieden bei Millisekunden anstatt mit einer Zählervariable |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du könntest noch nen Faktor bei den maximal Werten einbauen
um das einfach zu halten bzw. ohne große Änderungen an deinen Programmen zu machen . Alternativ die Hauptschleife zeitlich begrenzen das auf schnellen Computern 50 Frames constant laufen und bei älteren Compis auch noch 50 Frames erreicht werden . Oder Effekte sparen auf langsamen PCs . Gibt viele Möglichkeiten und die wurden hier schon xx mal besprochen . |
||
![]() |
Terror-State |
![]() Antworten mit Zitat ![]() |
---|---|---|
wenn ich mal meinen senf dazu geben darf:
das problem ist mir recht gut bekannt. und wenns auch recht umständlich löste ich dieses problem über MilliSecs() FrameAkt = ((MilliSecs()-Start) / 10) bzw. AktW = ((MilliSecs()-Start) / (30000/360.0)) dadurch lassen sich alle gewünschten intervalle simulieren! mitn bissel kreatitivät kann man das wunderbar ausbaun. Also ich benutzt das für alle "delay"-funktion. noch n tipp von mir: Finger weg vom Delay-Befehl... Der hält nämlich das programm an -> verschwendete rechenzeit in der man doch schon mal irgendwelche berechnungen machen kann. meines wissens nach gibt es keine effektivere lösung als die oben von mir beschriebene (eheh die leute die vll eine bessere haben füllen sich jetzt provoziert xD) |
||
Ob friedlich oder militant, wichtig ist der Widerstand |
![]() |
pile |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke für die Antworten!
@Markus2: Das klingt nach nem guten Ansatz ohne den vorhandenen Quellcode groß zu verändern. Was genau ist mit "Faktor" gemeint? Etwa eine Messung der Rechengeschwindigkeit? Wenn ja, wie kann man die Messen und wie legt man das in einer Variable ab? @Terror-State: Was bedeutet denn "FrameAkt" und "Start"? Gut, es sind Variablen aber wie müssen die eingesetzt werden? |
||
MfG. Pile
Aktuelles Projekt: Irgendwas in den BlitzEditor eintippen und sehen ob was dabei rauskommt. Fortschritt: ca. 3.141592653589793238% |
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich würde eine kleine Unterfunktion machen die
irgendwas auf dem Bildschirm malt und auch was berechnet . Und das Ergebnis ist dann Faktor 1 auf deinem PC . Bei anderen PCs mußte das Ergebnis dann umrechnen . Code: [AUSKLAPPEN] Faktor#=1.0 CoursorTime=21*Faktor (If Counter>=0 and Counter<=CoursorTime then Coursor=True) |
||
![]() |
Dante |
![]() Antworten mit Zitat ![]() |
---|---|---|
und nur falls du bei delay bleiben willst könnte das helfen ![]() (Hält aber auch das Programm an!!!) Code: [AUSKLAPPEN] aDelay(100) ;100 Frames abwarten
Print "HUHU" bDelay(10) ;10 Sekunden abwarten Print "HUHU" WaitKey() End ;Delay über FPS Function aDelay(s_FPS) Local fps start = MilliSecs() While Not fps = s_FPS time = MilliSecs() If MilliSecs() >= start + 1001 fps = fps + 1 EndIf Wend Return True End Function ;Delay über Millisecs Function bDelay(seks) Local timer, timed start = MilliSecs() timer = seks * 1000 While Not timed = 1 time = MilliSecs() If MilliSecs() >= start + timer timed = 1 Return True EndIf Wend End Function |
||
![]() |
pile |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nein den Delay-Befehl benutze ich gar nicht weil er eben das gesammte Programm anhällt. | ||
MfG. Pile
Aktuelles Projekt: Irgendwas in den BlitzEditor eintippen und sehen ob was dabei rauskommt. Fortschritt: ca. 3.141592653589793238% |
![]() |
Terror-State |
![]() Antworten mit Zitat ![]() |
---|---|---|
mhh naja ok ich erklärs dir kurz
AktW = ((MilliSecs()-Start) / (30000/360.0)) Start ist einfach die zeit seit dem programmstart in MilliSecs bzw. seit dem letzten zurücksetzen Start = MilliSecs Mit der Formel kann man zum beispiel sehr schön alles berechnen was mit kreis (sinus, cosinus usw.) berechnen... so setz ich die zeile ein |
||
Ob friedlich oder militant, wichtig ist der Widerstand |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group