Gibt es noch andere Methoden einen Screen "schön" auszufaden?
ChangeGamma() ist vielleicht beim Fading von weißen Texten auf
schwarzen Screen gut, aber ansonsten sieht es eher unprofessionell aus .-(
Richtiges Fading ohne ChangeGamma()
Hm, das Beispiel wird bei mir gestartet und gleich wieder beendet 
Code: Alles auswählen
Global FadeDens.f, FadeSpeed.f, FadeState.l, FadeSprite.l
#Fade_State_NoFade = 0
#Fade_State_FadingOut = 1
#Fade_State_FadingIn = -1
#Fade_State_FadedOut = 2
#Fade_State_FadedIn = -2
Procedure InitFade (Spr.l, sX.l, Sy.l, C)
Ret = #True
If (FadeSprite => 0) And (FadeSprite <= 10000)
If (CreateSprite (Spr, 16, 16, #PB_Sprite_Texture)) = #False
Ret = #False
Else
If ((Red (C) + Green (C) + Blue (0)) = 0): TransparentSpriteColor (Spr, 255, 0, 255): EndIf
StartDrawing (SpriteOutput (Spr)): DrawingMode (1)
Box (0, 0, 16, 16, C)
StopDrawing ()
CreateSprite3D (Spr, Spr)
ZoomSprite3D (Spr, sX, Sy)
EndIf
FadeSprite = Spr
FadeSpeed = 2.55
Else
Ret = #False
EndIf
ProcedureReturn Ret
EndProcedure
Procedure FadeOut ()
FadeDens = 0
FadeState = 1
EndProcedure
Procedure FadeIn ()
FadeDens = 255
FadeState = -1
EndProcedure
Procedure SetFadeSpeed (FS.f)
;Geschwindigkeit in % pro Schritt
FadeSpeed = (255 * (FS / 100))
EndProcedure
Procedure.l GetFadeState ()
;Status abfragen:
; 0 = Kein Fading
; 1 = Fading-Out läuft gerade
; 2 = Fading-Out beendet (Bild vollständig ausgeblendet)
;
; -1 = Fading-In läuft gerade
; -2 = Fading-In beendet (Bild vollständig sichtbar)
ProcedureReturn FadeState
EndProcedure
Procedure SetFadeState (FS.l)
;Status setzen:
; 0 = Kein Fading
; 1 = Fading-Out läuft gerade
; 2 = Fading-Out beendet (Bild vollständig ausgeblendet)
;
; -1 = Fading-In läuft gerade
; -2 = Fading-In beendet (Bild vollständig sichtbar)
If (FS = -2): FadeState = -2: FadeDens = 0: EndIf
If (FS = 2): FadeState = 2: FadeDens = 255: EndIf
ProcedureReturn FadeState
EndProcedure
Procedure Fade ()
If FadeState
If (Abs (FadeState) = 1)
FadeDens + (FadeSpeed * FadeState)
If FadeDens > 255: FadeDens = 255: FadeState = 2: EndIf
If FadeDens < 0: FadeDens = 0: FadeState = -2: EndIf
EndIf
If (Int (FadeDens) > 0): Start3D (): DisplaySprite3D (FadeSprite, 0, 0, FadeDens): Stop3D (): EndIf
EndIf
EndProcedure
If (InitSprite () And InitSprite3D() And InitKeyboard () And OpenScreen (800, 600, 32, "Fading"))
Structure Spr
X.l
Y.l
EndStructure
Dim Spr.Spr(9)
For I = 0 To 9
CreateSprite (I, 120, 80)
StartDrawing (SpriteOutput (I))
Box (0, 0, 120, 80, RGB (Random (255), Random (255), Random (255)))
StopDrawing ()
Spr(I)\X = Random (680)
Spr(I)\Y = Random (420)
Next
Delay (1000)
InitFade (999, 800, 600, $010101)
SetFadeSpeed (1)
FadeIn ()
Repeat
ExamineKeyboard ()
If KeyboardPushed (#PB_Key_Space)
Select GetFadeState ()
Case #Fade_State_FadedOut
FadeIn ()
Case #Fade_State_FadedIn
FadeOut ()
EndSelect
EndIf
For I = 0 To 9
DisplaySprite (I, Spr(I)\X, Spr(I)\Y)
Next
Fade ()
StartDrawing (ScreenOutput ()): DrawingMode (1): FrontColor (255, 255, 255)
Locate (10, 10): DrawText ("[SPACE] - Fade in/out")
StopDrawing ()
FlipBuffers ()
Until KeyboardPushed (#PB_Key_Escape)
EndIf
End
Komisch - also bei mir läufts (PB3.93).
Dann scheint's wohl an einem der folgenden Befehle zu liegen.
- InitSprite()
- InitSprite3d()
- InitKeyboard()
- OpenScreen()
Ändern den Code mal so ab, dass Du sie alle seperat aufrufst und darauf
prüfst, ob einer von ihnen "0" wiedergibt (also fehlschlägt). Dann hättest
Du das Problem eingekreist.
Dann scheint's wohl an einem der folgenden Befehle zu liegen.
- InitSprite()
- InitSprite3d()
- InitKeyboard()
- OpenScreen()
Ändern den Code mal so ab, dass Du sie alle seperat aufrufst und darauf
prüfst, ob einer von ihnen "0" wiedergibt (also fehlschlägt). Dann hättest
Du das Problem eingekreist.
So long,
benny!
.
nur t0te f1sche schw1mmen m1t dem str0m - 00100 !
benny!
.
nur t0te f1sche schw1mmen m1t dem str0m - 00100 !
Nö, eigentlich ist es - wie der Beispielcode oben zeigen sollte - gar nicht
mal so schwer. Ich weiß nicht warum es bei Dir nicht funktioniert.
Ich glaube nicht, dass es an der PureBasic Version liegt - ich habe ähnliches
Prinzip auch schon unter 3.91 verwendet.
Da das Demo bei Dir gleich wieder beendet wird - scheint sich das Programm
bei Dir gar nicht in der Hauptschleife zu befinden. Ansonsten müßtest Du
es ja wenigstens mit ESC manuell beenden müssen.
Komisch.
mal so schwer. Ich weiß nicht warum es bei Dir nicht funktioniert.
Ich glaube nicht, dass es an der PureBasic Version liegt - ich habe ähnliches
Prinzip auch schon unter 3.91 verwendet.
Da das Demo bei Dir gleich wieder beendet wird - scheint sich das Programm
bei Dir gar nicht in der Hauptschleife zu befinden. Ansonsten müßtest Du
es ja wenigstens mit ESC manuell beenden müssen.
Komisch.
So long,
benny!
.
nur t0te f1sche schw1mmen m1t dem str0m - 00100 !
benny!
.
nur t0te f1sche schw1mmen m1t dem str0m - 00100 !