hum , tu nous fais du réchauffé ?
par politesse je ne donnerai pas le lien du topic original
Code : Tout sélectionner
InitMouse()
InitKeyboard()
InitJoystick()
Declare Ondulation(xo,yo,Texte.s,ro,vo,bo)
; ***** variables a OLIV *********
; Variables
Global yo.f = 110
;vitesses de départ
Global vxo.f = 10
Global vyo.f = -45
Global Paso.f=0.2
#HauteurSin = 50 ; Coef qui joue sur la hauteur de la sinusoide
#LargeurSin = 50 ; Coef qui joue sur la largeur de la sinusoide
#VitesseAngle = 1 * #PI / 50 ; vitesse de modification de l'angle de départ du texte
Global angleo.f, FontID, long_text_bas
; ****************************************
Enumeration
#fenetre
#Police
#Image_buffer
EndEnumeration
pa=10:r=255-16
LoadFont(0,"arial",50)
; ***********************************
Resultat = InitSprite()
FontID = LoadFont(#Police, "arial", 18, #PB_Font_Bold )
EcranX = GetSystemMetrics_(#SM_CXSCREEN):;=largeur de l'ecran
EcranY = GetSystemMetrics_(#SM_CYSCREEN):;=hauteur de l'ecran
WindowID = OpenWindow(#Fenetre, 0, 0,1024,768, "hello",#PB_Window_SystemMenu|#PB_Window_BorderLess |#PB_Window_ScreenCentered )
Result = OpenWindowedScreen(WindowID(#Fenetre) ,0,0, 1027, 768, 1, 0,0)
CentreX = (EcranX) / 2
CentreY = 0
Vitesse.f = 8.2 ;donne scroling vert ou hori suivant
angle.f = 0 ;donne scroling vert ou hori suivant
amplitude.f =120 ; profondeur des dents
pas.f = 0.3 ; nombre de dent de scie
ss.f=2
Global Dim palette.l(500)
For i = 0 To 500
angle.f = angle + ((2 * #PI) / 500)
palette(i) = RGB (Abs (Cos (angle + (4*#PI/6))* 255),Abs (Cos (angle + #PI/3)* 255), Abs (Cos (angle)* 255))
Next
Texte.s= ".................... coucou SPH , tu ressort les vieux code ??? :D............"
Repeat
artichaut = artichaut+Cos( 36)/10
artison =artison+Sin( 36)
ExamineMouse()
StartDrawing(ScreenOutput())
; ***************************************************************************
a = Sin ((x + artichaut)/(500 + Sin (x/100)*100)) * 75 + 75
For Y=1 To EcranY-1
artichaut = Cos ((Y + artison)/(300 + Cos (Y/100)*100)) * 75 + 75
coul = a + artichaut
If coul > 500
coul = coul-500
EndIf
coul = palette (coul)
i=Y
amplitude= amplitude+ss
If amplitude>120:ss=-ss:EndIf
If amplitude<-120:ss=-0.001:ss=-ss:EndIf
x=(CentreX)-300+ Sin((angle + i* pas*10 ) * 0.0174533) * amplitude
LineXY(x+Sin((angle + i* pas*3 ) * 0.0174533) * amplitude ,Y,x+500+Sin((angle + i* pas*5 ) * 0.0174533) * amplitude ,Y,coul)
Next Y
StopDrawing()
angle=angle + Vitesse
;************ ondulation text ***************
xo=xo-2
If xo<-1600
xo= EcranX
EndIf
; ***************************************
Ondulation(xo,yo,Texte.s,255,0,255)
WindowEvent()
If MouseButton(2)
End
EndIf
FlipBuffers():; affiche l'ecran
ClearScreen(RGB(0, 0, 0)) :;efface l'ecran
Until Event=#PB_Event_CloseWindow
Procedure Ondulation(xo,yo,Texte.s,ro,vo,bo)
; procedure realisé par OLIV
StartDrawing(ScreenOutput()) ; Pour pouvoir utiliser les commandes des dessin 2D.
DrawingMode( #PB_2DDrawing_Transparent) ; On selectionne le mode pour ne pas avoir de fond derrière les lettres.
FrontColor(RGB(ro,vo,bo) ); On change la couleur.
DrawingFont(FontID(0)) ; On change la police
angleo + #VitesseAngle ; Angle de départ de la sinusoide en radian
If angleo >= 2 * #PI
angleo = 0
EndIf
; On affiche toute les lettres
posx = 10 ; Position du caractère
For n = 1 To Len(Texte) ; Pour chaque lettre du texte
Lettre.s = Mid(Texte, n, 1) ; on récupère la lettre à la position n
posy = 50 + #HauteurSin * Sin(angleo + posx / #LargeurSin) ; on calcul la position en Y de la lettre
; On part du centre de l'image (50) puis on ajoute un sin
; #HauteurSin fait varier l'amplitude du mouvement
; l'angle mis dans le sinus est d'abord composé de l'angle de départ d'affichage du texte (Angle)
; puis on augmente l'angle au fur et à mesure que l'on affiche des lettres avec le coefficient #LargeurSin qui permet de faire varier la largeur de la sinusoide
DrawText(xo+posx, yo+posy,Lettre)
posx +TextWidth(Lettre)
Next
StopDrawing() ; On signife que l'on arrête les fonctions dessin 2D.
EndProcedure