[Résolu] Fondu d'image avec DisplaySprite3D() qui marche mal

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Dionyzos
Messages : 53
Inscription : jeu. 05/févr./2004 19:57

[Résolu] Fondu d'image avec DisplaySprite3D() qui marche mal

Message par Dionyzos »

Bonjour,

Je cherche à faire un truc super tout bête, mais ca déconne, et je vois pas pourquoi.

J'aimerais faire un écran de présentation pour un jeu que je développe.
Un 1er ecran fait apparaitre en fondu progressif mon pseudo, puis le fait disparaitre toujours en fondu ; un deuxieme ecran fait apparaitre cette fois un image aussi en fondu puis la fait disparaitre en fondu.

Mais, hic ! la 4eme phase ne marche pas, et je vois pas pourquoi. 8O

Code : Tout sélectionner

Enumeration
  #WIN
  #FNT1
EndEnumeration
#LOGO1 =1005
#LOGO2 = 1006
#LOGO3 = 1007

#lgWin = 800
#htWin = 600

LoadFont(#FNT1,"Arial", 30, #PB_Font_HighQuality | #PB_Font_Bold)

If InitSprite() = 0 Or InitKeyboard() = 0 Or InitSprite3D() = 0
  MessageRequester("Erreur", "Initialisation Dx impossible",#PB_MessageRequester_Ok)
  End
EndIf

Procedure Presentation()
  temps = 20

  FlipBuffers()
  ClearScreen(255,255,255)
  
  String$ = "Dionyzos présente"
  For k=255 To 0 Step -8
    StartDrawing(ScreenOutput())
    DrawingMode(1)
    DrawingFont(UseFont(#FNT1))
    Locate((#lgWin - TextLength(String$)) / 2, (#htWin-100)/2)
    FrontColor(k,k,k)
    DrawText(String$)
    Delay(temps)
    StopDrawing()
    FlipBuffers()
  Next
  For k=0 To 255 Step 8
    StartDrawing(ScreenOutput())
    DrawingMode(1)
    DrawingFont(UseFont(#FNT1))
    Locate((#lgWin - TextLength(String$)) / 2, (#htWin-100)/2)
    FrontColor(k,k,k)
    DrawText(String$)
    Delay(temps)
    StopDrawing()
    FlipBuffers()
  Next
  
  ClearScreen(255,255,255)
  FlipBuffers()
  Delay(300)
  
  CatchSprite(#LOGO1,?Logo)
  CopySprite(#LOGO1,#LOGO2, #PB_Sprite_Texture)
  TransparentSpriteColor(#LOGO2,255,255,255)
  Start3D()
  CreateSprite3D(#LOGO3,#LOGO2)
  
  For k=0 To 255 Step 2
    DisplaySprite3D(#LOGO3,(#lgWin-600)/2,(#htWin-256)/2, k)
    FlipBuffers()
    Delay(temps)
  Next
  
  FreeSprite3D(#LOGO3)
  CreateSprite3D(#LOGO3,#LOGO2)
  ClearScreen(255,255,255)
  FlipBuffers()
  Delay(1)
  
  For k=0 To 255 Step 2
    DisplaySprite3D(#LOGO3,(#lgWin-600)/2,(#htWin-256)/2, 255-k)
    FlipBuffers()
    Delay(temps)
  
  Next
  
  FreeSprite3D(#LOGO3)
  Stop3D()
  FreeSprite(#LOGO2)
  FreeSprite(#LOGO1)

EndProcedure


;If OpenScreen(#lgWin,#htWin,32,"BomberMan")
If OpenWindow(#WIN,0,0,#lgWin,#htWin,#PB_Window_SystemMenu | #PB_Window_ScreenCentered,"Lune")
  If OpenWindowedScreen(WindowID(),0,0,#lgWin,#htWin,1,0,0)
    StartSpecialFX()

    Presentation()
    
    ;boucle principale
    Repeat
      EventID = WindowEvent()
      
      ExamineKeyboard()
      Delay(1)
    Until KeyboardPushed(#PB_Key_Escape) Or EventID = #PB_Event_CloseWindow
    
    StopSpecialFX()
  Else
    MessageRequester("Erreur", "Echec de création de l'écran Dx",#PB_MessageRequester_Ok)
  EndIf
Else
  MessageRequester("Erreur", "Echec de création de la fenêtre principale",#PB_MessageRequester_Ok)
EndIf

End

DataSection
  Logo:
  IncludeBinary "lune.bmp"
EndDataSection
; IDE Options = PureBasic v3.94 (Windows - x86)
; CursorPosition = 57
; Folding = -
; EnableXP
voici le lien zip de mon code avec l'image en fichier BMP : Lune.zip

Si qq'un comprend d'où vient le pb, je serais super joiasse :D
Dernière modification par Dionyzos le mer. 22/févr./2006 21:01, modifié 1 fois.
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message par Jacobus »

J'ai essayé, (c'est pas mal comme effet)
et il semble que tu n'as qu'oublié un moins (-) dans ta 2ème boucle

Code : Tout sélectionner

For k=0 To 255 Step -2
de cette façon ça fonctionne.

bout de code concerné

Code : Tout sélectionner

For k=0 To 255 Step 2
    DisplaySprite3D(#LOGO3,(#lgWin-600)/2,(#htWin-256)/2, k)
    FlipBuffers()
    Delay(temps)
  Next
  
  FreeSprite3D(#LOGO3)
  CreateSprite3D(#LOGO3,#LOGO2)
  ClearScreen(255,255,255)
  FlipBuffers()
  Delay(1)
  
  For k=0 To 255 Step -2
    DisplaySprite3D(#LOGO3,(#lgWin-600)/2,(#htWin-256)/2, 255-k)
    FlipBuffers()
    Delay(temps)
  Next
Dernière modification par Jacobus le mer. 22/févr./2006 20:26, modifié 1 fois.
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Avatar de l’utilisateur
Dionyzos
Messages : 53
Inscription : jeu. 05/févr./2004 19:57

Message par Dionyzos »

Bon j'ai trouvé comment régler le pb il faut simplement que je mettes un ClearScreen(255,255,255) au début de mes 2 boucles FOR.

Code : Tout sélectionner

  For k=0 To 255 Step 16
    ClearScreen(255,255,255)
    DisplaySprite3D(#LOGO3,(#lgWin-600)/2,(#htWin-256)/2, k)
    FlipBuffers()
    Delay(temps)
  Next

  Delay(2000)

  For k=255 To 0 Step -16
    ClearScreen(255,255,255)
    DisplaySprite3D(#LOGO3,(#lgWin-600)/2,(#htWin-256)/2, k)
    FlipBuffers()
    Delay(temps)
  Next
Par contre autant en mode fenetre le résultat est nickel, mais en mode plein ecran ca scintille à mort :(
Avatar de l’utilisateur
Dionyzos
Messages : 53
Inscription : jeu. 05/févr./2004 19:57

Message par Dionyzos »

Jacobus a écrit :

Code : Tout sélectionner

For k=0 To 255 Step -2
En partant de 0 pour arriver à 255 en retirant 2 à chaque pas, k ne risque pas d'atteindre 255 un jour ;)
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message par Jacobus »

:lol: t'as raison, je m'est planté.
mais sans la lune reste en place.
Bah j'ai lu trop vite...

Code : Tout sélectionner

For k=255 To 0 Step -2
à l'envers plutôt, avec ta transparence à 255-k

bah, non ça saute.... :roll:
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Avatar de l’utilisateur
Dionyzos
Messages : 53
Inscription : jeu. 05/févr./2004 19:57

Message par Dionyzos »

aaaaahhh ! c bon de trouver 8)

voilà le code la procédure qui marche impec en mode fenetre et plein ecran :lol:

Code : Tout sélectionner

Procedure Presentation()
  temps = 20

  ClearScreen(255,255,255)
  FlipBuffers()
  Delay(2000)
  ClearScreen(255,255,255)
  
  
  String$ = "Dionyzos présente"
  For k=255 To 0 Step -8
    StartDrawing(ScreenOutput())
    DrawingMode(1)
    DrawingFont(UseFont(#FNT1))
    Locate((#lgWin - TextLength(String$)) / 2, (#htWin-100)/2)
    FrontColor(k,k,k)
    DrawText(String$)
    Delay(temps)
    StopDrawing()
    FlipBuffers()
  Next
  For k=0 To 255 Step 8
    StartDrawing(ScreenOutput())
    DrawingMode(1)
    DrawingFont(UseFont(#FNT1))
    Locate((#lgWin - TextLength(String$)) / 2, (#htWin-100)/2)
    FrontColor(k,k,k)
    DrawText(String$)
    Delay(temps)
    StopDrawing()
    FlipBuffers()
  Next
  
  ClearScreen(255,255,255)
  FlipBuffers()
  ClearScreen(255,255,255)
  Delay(300)
  
  CatchSprite(#LOGO1,?Logo)
  CopySprite(#LOGO1,#LOGO2, #PB_Sprite_Texture)
  TransparentSpriteColor(#LOGO2,255,255,255)
  Start3D()
  CreateSprite3D(#LOGO3,#LOGO2)

  For k=0 To 255 Step 8
    FlipBuffers()
    ClearScreen(255,255,255)
    DisplaySprite3D(#LOGO3,(#lgWin-600)/2,(#htWin-256)/2, k)
    Delay(temps)
  Next

  Delay(2000)

  For k=255 To 0 Step -8
    FlipBuffers()
    ClearScreen(255,255,255)
    DisplaySprite3D(#LOGO3,(#lgWin-600)/2,(#htWin-256)/2, k)
    Delay(temps)
  Next

  ClearScreen(255,255,255)
  FlipBuffers()
  ClearScreen(255,255,255)
  Delay(1000)
  DisplaySprite3D(#LOGO3,(#lgWin-600)/2,(#htWin-256)/2, 255)
  FlipBuffers()
  Stop3D()
  Delay(500)
  FreeSprite3D(#LOGO3)
  FreeSprite(#LOGO2)
  FreeSprite(#LOGO1)
EndProcedure
Moralité : faut pas hésiter à rajouter des effacements d'écran couplé avec des flippebuffers :)
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message par Jacobus »

Pas mal et sympa pour un splash screen.
je le met de côté celui-là :)
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Répondre