or use a fliped-black-box around your camera and use entityalpha on the blackbox ( yes, it seems to be the same way xD ) but it can extend to a transition Library that can be used for many things.
like this one
( using quad , and allow transition Fx, allow setting start color/end color for the transition, and a Cine Fx => Mode 16/9 )
;==============================================================================================
;==============================================================================================
;
; Librairie d'effets simples => Fondu de camera, et effet Cinema ( 16/9 )
; Par ®BOBYSAIT => <a href="http://www.BlitzFr.com" target="_blank">http://www.BlitzFr.com</a>
; utilisation libre
; =>la rstriction est de mentionner mon pseudo dans vos credits
; => et un lien vers le site blitzFr serait apprecié !
;
; Avec transition, et choix des couleurs
; Verification automatique de l'existence de chaque entité
; pour s'assurer de ne pas avoir d'erreur de programme !
; Optimiser au mieux pour le moment
;
; Pour toutes info, mailez moi à Bobysait@... ou passez sur le site www.BlitzFr.Com !
;
;==============================================================================================
;==============================================================================================
; le type pour la fonction Cine
Type Fx_Cine
Field Cam%
Field Zoom#
Field Sp%
Field ColR%,ColG%,ColB%
Field Etape%
End Type
; le type pour les fondu de camera
Type Fx_Fondu
Field Cam% ; camera du fondu
Field Zoom# ; zoom de la camera
Field Sp% ; Sprite du fondu
Field Alpha# ; niveau courant de l'alpha
Field Time% ; Durée du fondu
Field FlipIt% ; Fondu independant ou pendant une scene ?
Field Mode% ; Fondu In ou Out
Field Etape% ; stade du fondu ( actif, en attente etc... )
Field S_ColR% ; Couleurs RGB du debut de fondu
Field S_ColG%
Field S_ColB%
Field E_ColR% ; couleurs RGB finales du fondu
Field E_ColG%
Field E_ColB%
End Type
Function FX_Create_cinema3D(camera,Order_Fx2=-1,ColR%=0,ColG%=0,ColB%=0,Zoom#=1)
If camera<>0
fx.Fx_Cine = New Fx_Cine
Fx\Cam% = Camera
fx\Zoom# = Zoom
Fx\ColR% = ColR
Fx\ColG% = ColG
Fx\ColB% = ColB
fx\etape% = 0 ; par defaut le mode est desactivé !
Fx\Sp% = CreateMesh (camera)
Local sfc = CreateSurface (Fx\Sp)
AddVertex sfc ,-8.2/8 ,6.2/8 ,0
Local l_v% = AddVertex (sfc ,8.2/8 ,6.2/8 ,0)
AddVertex sfc ,-8.2/8 ,4.5/8 ,0
AddVertex sfc ,8.2/8 ,4.5/8 ,0
AddVertex sfc ,-8.2/8 ,-4.5/8 ,0
AddVertex sfc ,8.2/8 ,-4.5/8 ,0
AddVertex sfc ,-8.2/8 ,-6.2/8 ,0
AddVertex sfc ,8.2/8 ,-6.2/8 ,0
AddTriangle sfc ,l_v+0 ,l_v+1 ,l_v+2
AddTriangle sfc ,l_v+3 ,l_v+2 ,l_v+1
AddTriangle sfc ,l_v+4 ,l_v+5 ,l_v+6
AddTriangle sfc ,l_v+7 ,l_v+6 ,l_v+5
EntityColor Fx\Sp ,ColR,ColG,ColB
EntityOrder Fx\Sp ,Order_Fx2
MoveEntity Fx\Sp ,0,0,Zoom
NameEntity Fx\Sp ,Handle(fx)
HideEntity Fx\Sp
Return Fx\Sp
Else
Return False
EndIf
End Function
Function Fx_MAJ_CINE(Cine%,NewIt%=True,camera%=0)
If Cine=0
Return False
Else
; à faire => bascule le mode cine On/OFF avec transition
fx.Fx_Cine=Object.Fx_Cine(EntityName(Cine))
If Fx<>Null
Select fx\etape
Case 1
ShowEntity Fx\Sp
Default
End Select
Else
; pas de cine créé ?
If NewIt=True And Camera<>0
; => on en créé un nouveau, il sera mis à jour à la prochaine boucle !
Cine = FX_Create_cinema3D(camera,-1,0,0,0,1)
Return Cine
EndIf
EndIf
EndIf
End Function
Function FX_DestroyCine(Cine)
If Cine=0
Return False
Else
fx.Fx_Cine=Object.Fx_Cine(EntityName(Cine))
If fx<>Null
If fx\Sp<>0 FreeEntity Fx\Sp
Delete fx
EndIf
EndIf
End Function
Function FX_Init_Fondu(camera,Mode%,Time%,FlipIt%=True,zoom#=1)
fx.Fx_Fondu=New Fx_Fondu
fx\Cam% = Camera
fx\Zoom# = Zoom
fx\Sp% = CreateSprite(Camera)
MoveEntity fx\Sp,0,0,fx\Zoom#*10 ; on decale le sprite assez loin et on le surdimensionns
ScaleSprite fx\Sp,20,20 ; ( en prevision d'un eventuel zoom )
EntityColor fx\Sp,0,0,0 ; couleur du fondu
EntityFX fx\Sp,9+16 ; non affecté par le brouillard et les lumieres + double face
EntityOrder fx\Sp,-5000 ; affciéh devant tout ... enfin presque ...
EntityAlpha fx\Sp,0 ; Stade d'attente => alpha à 0
HideEntity fx\Sp ; Stade d'attente, on le cache !
NameEntity fx\Sp,Handle(fx) ; Nomme le sprite par le handle du type
; selection du mode
fx\Mode% = Mode
Select Mode
Case 0 ; fondu inactif
fx\alpha# = 0
HideEntity fx\Sp
Case -1
ShowEntity fx\Sp
fx\alpha# = 1
Case 1
ShowEntity fx\Sp
fx\alpha# = 0
End Select
; ajuste l'alpha en fonction du mode
EntityAlpha fx\Sp,fx\alpha#
; le fondu est il ancré dans une scene ou se joue t'il dans une boucle independante ? ( arrêt de la scene )
fx\FlipIt% = FlipIt
Return fx\Sp
End Function
Function FX_MAJ_Fondu%(Camera,Fondu%,l_dt%=1,del%=False)
fx.FX_Fondu=Object.FX_Fondu(EntityName(Fondu))
If fx<>Null
Select fx\FlipIT
Case False
Select fx\Mode
Case 0 ; mode attente => reste dans le dernier etat
Case -1 ; fondu In => on affiche l'ecran
If fx\Time>0
Fx\alpha = Fx\alpha-Float(l_Dt)/fx\Time
ColR% = fx\S_ColR*(1-fx\Alpha)+fx\E_ColR*fx\Alpha
ColG% = fx\S_ColG*(1-fx\Alpha)+fx\E_ColG*fx\Alpha
ColB% = fx\S_ColB*(1-fx\Alpha)+fx\E_ColB*fx\Alpha
If ColR<0 ColR=0
If ColR>255 ColR=255
If ColG<0 ColG=0
If ColG>255 ColG=255
If ColB<0 ColB=0
If ColB>255 ColB=255
EntityColor Fx\Sp,ColR,ColG,ColB
EntityAlpha Fx\Sp,fx\Alpha
If fx\alpha <= 0
fx\Mode = 0
EntityAlpha fx\Sp,0:HideEntity fx\Sp
EntityColor fx\Sp,fx\E_ColR,fx\E_ColG,fx\E_ColB
; si pas de retour, le fondu est supprimé
If del=True FX_Destroy_Fondu(Fx\Sp)
EndIf
Return fx\Mode
Else
fx\Mode=0
If del=True FX_Destroy_Fondu(Fx\Sp)
EndIf
Case 1 ; fondu Out => on cache l'ecran
If fx\Time>0
Fx\alpha = Fx\alpha+Float(l_Dt)/fx\Time
ColR% = fx\S_ColR*(1-fx\Alpha)+fx\E_ColR*fx\Alpha
ColG% = fx\S_ColG*(1-fx\Alpha)+fx\E_ColG*fx\Alpha
ColB% = fx\S_ColB*(1-fx\Alpha)+fx\E_ColB*fx\Alpha
If ColR<0 ColR=0
If ColR>255 ColR=255
If ColG<0 ColG=0
If ColG>255 ColG=255
If ColB<0 ColB=0
If ColB>255 ColB=255
EntityColor Fx\Sp,ColR,ColG,ColB
EntityAlpha Fx\Sp,fx\Alpha
If fx\alpha >= 1
fx\Mode = 0
EntityAlpha fx\Sp,1
EntityColor fx\Sp,fx\E_ColR,fx\E_ColG,fx\E_ColB
; si pas de retour, le fondu est supprimé
If del=True FX_Destroy_Fondu(Fx\Sp)
EndIf
Return fx\Mode
Else
fx\Mode=0
If del=True FX_Destroy_Fondu(Fx\Sp)
EndIf
End Select
Case True
l_st% = MilliSecs()
l_LT% = 0
Repeat
l_mt% = MilliSecs()
l_rDT% = l_mt-(l_st+l_LT)
l_dt% = l_rdt
If l_rdt<2 l_dt=2
If l_rdt>60 l_dt=60
l_LT = l_lt+l_dt
Select fx\mode
Case -1
If fx\Time>0
ShowEntity fx\Sp
Fx\alpha = Fx\alpha-Float(l_Dt)/fx\Time
ColR% = fx\S_ColR*(1-fx\Alpha)+fx\E_ColR*fx\Alpha
ColG% = fx\S_ColG*(1-fx\Alpha)+fx\E_ColG*fx\Alpha
ColB% = fx\S_ColB*(1-fx\Alpha)+fx\E_ColB*fx\Alpha
If ColR<0 ColR=0
If ColR>255 ColR=255
If ColG<0 ColG=0
If ColG>255 ColG=255
If ColB<0 ColB=0
If ColB>255 ColB=255
EntityColor Fx\Sp,ColR,ColG,ColB
EntityAlpha Fx\Sp,fx\Alpha
If fx\alpha <= 0
; si pas de retour, le fondu est supprimé
If del=True FX_Destroy_Fondu(Fx\Sp):Exit
; sinon...
fx_Mode = 0
EntityAlpha fx\Sp,0:HideEntity fx\Sp
EntityColor fx\Sp,fx\E_ColR,fx\E_ColG,fx\E_ColB
HideEntity fx\Sp
Exit
EndIf
Else
fx\Mode=0
If del=True FX_Destroy_Fondu(Fx\Sp)
EndIf
Case 1
If fx\Time>0
ShowEntity fx\Sp
Fx\alpha = Fx\alpha+Float(l_Dt)/fx\Time
ColR% = fx\S_ColR*(1-fx\Alpha)+fx\E_ColR*fx\Alpha
ColG% = fx\S_ColG*(1-fx\Alpha)+fx\E_ColG*fx\Alpha
ColB% = fx\S_ColB*(1-fx\Alpha)+fx\E_ColB*fx\Alpha
If ColR<0 ColR=0
If ColR>255 ColR=255
If ColG<0 ColG=0
If ColG>255 ColG=255
If ColB<0 ColB=0
If ColB>255 ColB=255
EntityColor Fx\Sp,ColR,ColG,ColB
EntityAlpha Fx\Sp,fx\Alpha
If fx\alpha >= 1
; si pas de retour, le fondu est supprimé
If del=True FX_Destroy_Fondu(Fx\Sp):Exit
; sinon...
fx_Mode = 0
EntityAlpha fx\Sp,1
EntityColor fx\Sp,fx\E_ColR,fx\E_ColG,fx\E_ColB
Exit
EndIf
Else
fx\Mode=0
If del=True FX_Destroy_Fondu(Fx\Sp)
EndIf
End Select
RenderWorld
Flip
Forever
; si pas de retour, le fondu est supprimé
If del=True FX_Destroy_Fondu(Fx_Sp) : Return False
End Select
EndIf
End Function
Function FX_Select_Fondu%(camera%)
; si la camera existe !
If camera<>0
For fx.FX_Fondu=Each FX_Fondu
; fondu existe , la camera coincide => on le retourne !
If fx<> Null
If fx\Cam=Camera
Return fx\Sp
EndIf
EndIf
Next
; n'existe pas ? on en retourne un neuf, avec des param nuls
fondu=FX_Init_Fondu(camera,0,0,0)
Return fondu
EndIf
; sinon on retourne "0"
Return False
End Function
Function FX_Get_Fondu_Time%(Fondu%)
If fondu<>0
fx.FX_Fondu=Object.FX_Fondu(EntityName(Fondu))
If fx<>Null
Return fx\Time%
EndIf
EndIf
End Function
Function FX_Get_Fondu_Mode%(Fondu%)
If fondu<>0
fx.FX_Fondu=Object.FX_Fondu(EntityName(Fondu))
If fx<>Null
Return fx\Mode%
EndIf
EndIf
End Function
Function FX_Get_Fondu_Flip%(Fondu%)
If fondu<>0
fx.FX_Fondu=Object.FX_Fondu(EntityName(Fondu))
If fx<>Null
Return fx\FlipIt%
EndIf
EndIf
End Function
Function FX_Get_Fondu_Alpha#(Fondu%)
If fondu<>0
fx.FX_Fondu=Object.FX_Fondu(EntityName(Fondu))
If fx<>Null
Return fx\Alpha#
EndIf
EndIf
End Function
Function FX_Get_Fondu_Camera%(Fondu%)
If fondu<>0
fx.FX_Fondu=Object.FX_Fondu(EntityName(Fondu))
If fx<>Null
Return fx\Cam%
EndIf
EndIf
End Function
Function FX_Set_Fondu_Time%(Fondu%,Time%)
If fondu<>0
fx.FX_Fondu=Object.FX_Fondu(EntityName(Fondu))
If fx<>Null
fx\Time%=Time
EndIf
EndIf
End Function
Function FX_Set_Fondu_EndColor(Fondu%,ColR%=0,ColG%=0,ColB%=0)
If fondu<>0
fx.FX_Fondu=Object.FX_Fondu(EntityName(Fondu))
If fx<>Null
fx\E_ColR%=ColR
fx\E_ColG%=ColG
fx\E_ColB%=ColB
EndIf
EndIf
End Function
Function FX_Set_Fondu_StartColor(Fondu%,ColR%=0,ColG%=0,ColB%=0)
If fondu<>0
fx.FX_Fondu=Object.FX_Fondu(EntityName(Fondu))
If fx<>Null
fx\S_ColR%=ColR
fx\S_ColG%=ColG
fx\S_ColB%=ColB
If fx\Sp<>0 EntityColor fx\Sp,ColR,ColG,ColB
EndIf
EndIf
End Function
Function FX_Set_Fondu_Mode(Fondu%,Mode%)
If fondu<>0
fx.FX_Fondu=Object.FX_Fondu(EntityName(Fondu))
If fx<>Null
fx\Mode=Mode
EndIf
EndIf
End Function
Function FX_Set_Fondu_Flip(Fondu%,FlipIt%)
If fondu<>0
fx.FX_Fondu=Object.FX_Fondu(EntityName(Fondu))
If fx<>Null
fx\FlipIt=FlipIt
EndIf
EndIf
End Function
Function FX_Set_Fondu_Camera%(Fondu%,Camera%)
If Camera<>0
If fondu<>0
fx.FX_Fondu=Object.FX_Fondu(EntityName(Fondu))
If fx<>Null
If fx\Sp<>0
EntityParent fx\Sp,0
PositionEntity fx\Sp,EntityX(camera,1),EntityY(camera,1),EntityZ(camera,1)
MoveEntity fx\Sp,0,0,fx\zoom
EntityParent fx\Sp,Camera
fx\cam = Camera
EndIf
EndIf
EndIf
EndIf
End Function
Function FX_Set_Fondu_alpha(Fondu%,Alpha#)
If fondu<>0
fx.FX_Fondu=Object.FX_Fondu(EntityName(Fondu))
If fx<>Null
fx\Alpha=Alpha
If fx\Sp<>0 EntityAlpha fx\Sp,Alpha
EndIf
EndIf
End Function
Function FX_Set_Fondu_Zoom(Fondu%,Zoom#)
If fondu<>0
fx.FX_Fondu=Object.FX_Fondu(EntityName(Fondu))
If fx<>Null
If fx\Sp<>0
MoveEntity fx\Sp,0,0,-fx\zoom*10
fx\zoom=zoom
MoveEntity fx\Sp,0,0,fx\zoom*10
EndIf
EndIf
EndIf
End Function
Function FX_Destroy_Fondu(Fondu)
If fondu<>0
fx.FX_Fondu=Object.FX_Fondu(EntityName(Fondu))
If fx<>Null
If fx\Sp<>0
EntityParent fx\Sp,0
FreeEntity fx\Sp
EndIf
Delete fx
EndIf
EndIf
End Function