?? % transparente bitmaps
- Green Snake
- Beiträge: 1394
- Registriert: 22.02.2005 19:08
?? % transparente bitmaps
hallo
also ich habe ein bmp in den openscreen geladen
und jetzt möchte ich, dass das bild....
sagen wir mal zu 50 % transparent ist
wie soll ich das anstellen?
hoffe ihr wisst das
also ich habe ein bmp in den openscreen geladen
und jetzt möchte ich, dass das bild....
sagen wir mal zu 50 % transparent ist
wie soll ich das anstellen?
hoffe ihr wisst das
-.-"
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
- Green Snake
- Beiträge: 1394
- Registriert: 22.02.2005 19:08
Danke
Hallo
vielen dank
aber weisst du auch , wie man macht, das zb ein 10 sekunden die transparenz von 0 auf 255 hochgeht ? (blending heisst das glaubich)
ich hoffe du weisst das auch
und nochmals danke für deine hilfe von vorhin
vielen dank
aber weisst du auch , wie man macht, das zb ein 10 sekunden die transparenz von 0 auf 255 hochgeht ? (blending heisst das glaubich)
ich hoffe du weisst das auch
und nochmals danke für deine hilfe von vorhin
-.-"
Code: Alles auswählen
For i = 0 To 255
Delay(Int(10/255))
DisplayTranslucideSprite(#Sprite, X, Y, i)
Next
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
And we're out of beta. We're releasing on time.
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
das hab ich früher auch gedacht, aber das stimmt garnicht...nco2k hat geschrieben:bloß nix mit Delay() das bremst dich nur aus!!
- 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
Code: Alles auswählen
Delay(Int(10/255))
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)
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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Code: Alles auswählen
lngTime = ElapsedMilliseconds()
Repeat
ExamineKeyboard()
ClearScreen(0,0,0)
If ElapsedMilliseconds() - lngTime > 10 ;Musst mit der Zeit ein bisschen rumspielen
If i<255
i+1
EndIf
lngTime = ElapsedMilliseconds()
EndIf
DisplayTranslucideSprite(0,0,0,i)
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)