Ciel qui change en fonction du temps qui passe (Jour/Nuit)
Publié : lun. 13/sept./2004 20:26
Voici un code qui permet dans mon jeu d'avoir le ciel qui change avec le temps qui passe. Levé de soleil, ciel bleu, couché de soleil, nuit etc...
ça s'écoule doucement (10 minutes par étape je pense)
Le PB c'est que je voudrais réussir a faire le fondu des images un peu plus rapide (mais sans que ça se remarque) et je voudrais surtout que ça prennent moins de ressource car ça bouffe vachement de temps machine ... quelqu'un a une idée ?
Image 1
Image 2
Image 3
Image 4
ça s'écoule doucement (10 minutes par étape je pense)
Le PB c'est que je voudrais réussir a faire le fondu des images un peu plus rapide (mais sans que ça se remarque) et je voudrais surtout que ça prennent moins de ressource car ça bouffe vachement de temps machine ... quelqu'un a une idée ?
Image 1
Image 2
Image 3
Image 4
Code : Tout sélectionner
#Window = 0
#Width = 640
#Height = 480
;- Init DirectX
If InitSprite() = 0 Or InitSprite3D() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0 Or InitSound() = 0
MessageRequester("Erreur", "Impossible d'initialiser DirectX", 0)
CloseWindow(#Window) : End
EndIf
res = OpenWindow(#Window, 0, 0, #Width, #Height, #PB_Window_TitleBar | #PB_Window_ScreenCentered, "")
OpenWindowedScreen(res, 0, 0, 800, 600, 0, 0, 0)
; OpenScreen( #Width , #Height , 32 , "M3D_Matrix3D" )
; Préparation de la structure des projectils
UsePNGImageDecoder()
LoadSprite(1, "data/env/p_daysky.png", 0)
LoadSprite(2, "data/env/p_sunset.png", 0)
LoadSprite(3, "data/env/p_nightsky.png", 0)
LoadSprite(4, "data/env/p_sunrise.png", 0)
CreateSprite(10, 640, 480)
CreateSprite(11, 640, 480)
CopySprite(1, 11)
Global Paysage_x
Global Paysage_y
Global Paysage_scroll
Global Paysage_id1
Global Paysage_id2
Global fad
Global waitpaysage
Paysage_id1 = 1
Paysage_id2 = 2
Dim Col1s(400)
Dim Col2s(400)
Procedure paysage()
If ElapsedMilliseconds() > waitpaysage
waitpaysage = ElapsedMilliseconds() + 100
Paysage_scroll = Paysage_scroll + 1
EndIf
If Paysage_scroll = 640 : Paysage_scroll = 0 : EndIf
Paysage_x = Paysage_x + 1
If Paysage_x > 640
Paysage_y = Paysage_y + 1
Paysage_x = 0
fad = fad + 2
If fad > 255
fad = 0
Paysage_id1 = Paysage_id1 + 1
Paysage_id2 = Paysage_id1 + 2
If Paysage_id1 > 4 : Paysage_id1 = 1 : EndIf
If Paysage_id2 > 4 : Paysage_id2 = 1 : EndIf
EndIf
EndIf
StartDrawing(SpriteOutput(Paysage_id1))
For z = 1 To 400
Col1s(z) = Point(Paysage_x, z)
Next
StopDrawing()
StartDrawing(SpriteOutput(Paysage_id2))
For z = 1 To 400
Col2s(z) = Point(Paysage_x, z)
Next
StopDrawing()
StartDrawing(SpriteOutput(11))
For z = 1 To 400
r1 = Red(Col1s(z))
v1 = Green(Col1s(z))
b1 = Blue(Col1s(z))
r2 = Red(Col2s(z))
v2 = Green(Col2s(z))
b2 = Blue(Col2s(z))
r3 = r1 - fad * (r1 - r2) / 255
v3 = v1 - fad * (v1 - v2) / 255
b3 = b1 - fad * (b1 - b2) / 255
Plot (Paysage_x, z, RGB(r3, v3, b3))
Next
StopDrawing()
DisplaySprite(11, (0 - Paysage_scroll), 0)
DisplaySprite(11, (640 - Paysage_scroll), 0)
EndProcedure
Repeat
If f > 255 : f = 0 : EndIf
FlipBuffers()
ClearScreen(0, 0, 0)
paysage()
While WindowEvent() : Wend ; evite le plantage clic gauche
ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)