Richtiges Fading ohne ChangeGamma()

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Gamer
Beiträge: 180
Registriert: 21.03.2005 16:59

Richtiges Fading ohne ChangeGamma()

Beitrag 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 .-(
Benutzeravatar
benny
Beiträge: 383
Registriert: 29.08.2004 09:18
Wohnort: Am Ende des www's
Kontaktdaten:

Beitrag von benny »

Vielleicht hilft Dir folgendes weiter :

http://www.hja-web.de/websites/fh-web24 ... rog=fading
So long,
benny!
.
nur t0te f1sche schw1mmen m1t dem str0m - 00100 !
Gamer
Beiträge: 180
Registriert: 21.03.2005 16:59

Beitrag 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 
Benutzeravatar
benny
Beiträge: 383
Registriert: 29.08.2004 09:18
Wohnort: Am Ende des www's
Kontaktdaten:

Beitrag 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.
So long,
benny!
.
nur t0te f1sche schw1mmen m1t dem str0m - 00100 !
Gamer
Beiträge: 180
Registriert: 21.03.2005 16:59

Beitrag 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 :-(
Benutzeravatar
benny
Beiträge: 383
Registriert: 29.08.2004 09:18
Wohnort: Am Ende des www's
Kontaktdaten:

Beitrag 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. :roll:
So long,
benny!
.
nur t0te f1sche schw1mmen m1t dem str0m - 00100 !
Benutzeravatar
Lukas-P
Beiträge: 262
Registriert: 07.10.2004 12:03

Beitrag von Lukas-P »

Ich hab PB 3.92 und bei mir funktionierts


Hats du den Code mal mit dem Debugger compilled
Gamer
Beiträge: 180
Registriert: 21.03.2005 16:59

Beitrag von Gamer »

Ja aber der gibt nichts aus :-( Muss ich wohl updaten...
Antworten