Seite 1 von 1
Richtiges Fading ohne ChangeGamma()
Verfasst: 21.03.2005 17:22
von Gamer
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 .-(
Verfasst: 21.03.2005 19:48
von benny
Verfasst: 22.03.2005 01:52
von Gamer
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
Verfasst: 22.03.2005 11:37
von benny
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.
Verfasst: 22.03.2005 12:44
von Gamer
Hab ich getestet, daran liegt es nicht

Hab PB 3.91...
Also ist es mit PB auch nur schwer möglich einen Screen komplett auszufaden, ist bei BB ja genauso

Verfasst: 22.03.2005 13:16
von benny
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.

Verfasst: 22.03.2005 14:19
von Lukas-P
Ich hab PB 3.92 und bei mir funktionierts
Hats du den Code mal mit dem Debugger compilled
Verfasst: 22.03.2005 16:41
von Gamer
Ja aber der gibt nichts aus

Muss ich wohl updaten...