nco2k hat geschrieben:bloß nix mit Delay() das bremst dich nur aus!!
das hab ich früher auch gedacht, aber das stimmt garnicht...
- CPU-Auslastung
schon ein Delay(1) kann wunder wirken, die CPU rödelt nicht mehr wie blöde,
und auf die eine millisekunden kommt es kaum an:
bei einer gewünschten Framarate von 60 darf jeder
hauptschleifendurchlauf 16.666666 millisekunden dauern,
und wenn du nicht in 15ms fertig wirst, dann nimm eh lieber 30FPS.
> Alternativ könnte man zum Beispiel auch mit ElapsedMilliseconds() arbeiten
isn bisschen ungenau. aber geht auch.
trotzdem ist
ein denkfehler:
es muss 10000/255 heissen.
ausserdem dürfte Green Snake von dem Code keinen effekt sehen,
und sich wundern warum:
du hast ihn nicht drauf ningewiesen, das das flipbuffers() mit in der schleife sein muss
@Green Snake
folgendes Codestückchen ist nur die Hauptschleife,
du musst vorher noch ein paar befehle durchführen,
die lasse ich dich selbst machen
ausserdem musst du natürlich Spritenummer und Position im Display-Befehl anpassen.
Code: Alles auswählen
SetFrameRate(60)
Repeat
ExamineKeyboard()
ClearScreen(0,0,0)
j+1
If j > 2
j = 0
If i<255
i+1
EndIf
EndIf
DisplayTranslucideSprite(0,0,0,i)
FlipBuffers()
Delay(10)
Until KeyboardPushed(#PB_Key_Escape)
erklärung:
mit SetFrameRate() syncronisieren wir die schleife auf 60FPS.
dieser Befehl ist bei manchen Programmierern sehr unbeliebt,
da dann der FlipBuffers()-befehl auf das ende der Phase wartet,
und dabei die CPU auf Vollast fährt.
um das zu vermeiden, bauen wir ein Delay(10) ein (10 ms warten),
wenn in einer schleife mehr getan werden muss, muss man ggf.
die anzahl ms verringern.
ClearScreen() und FlipBuffers() brauchen wir in jeder schleife, die grafik
auf einem DX-Screen darstellen soll.
die variablen j und i leisten folgendes:
j zähl jeden Frame hoch, bis 2, dann wird es wieder 0,
und i wird hochgezählt, wenn es noch unter 255 ist,
es steigt also alle 3 Frames um 1 an, bis 255, dann nicht weiter.
i wird im DisplayTranslucideSprite() als transparenz-wert benutzt,
damit dauert das einblenden insgesamt 12.75sec
die schleife kann durch drücken von ESC beendet werden.