Page 1 sur 2
Lib sur l'animation du texte
Publié : mer. 18/août/2004 23:52
par Oliv
Garzul (qu'est-ce qu'il nous fait faire celui-là, un jour on va copier son orthographe

) m'a demandé comment faire onduler du texte, je ne savais pas mais j'avais une peite idée alors j'ai essayé et j'ai peut-être réinventé la roue (soyons modestes) mais voilà mon code. Je vais y mettre d'autres animation que j'ai en tête et faire un lib.
essayez aussi en metant les paramètres Hauteur et Vitesse à 1, moi je trouve ça très drôle, ça fait plus vibreur que onduleur mais bon
edit : Grace à Garzul vous avez le droit aux comentaires de la fonction Ondulation()
Code : Tout sélectionner
InitSprite()
; Variables
Hauteur.l = 2 ; Multiplicateur de Sin() qui augmente ou réduit le débatement du texte.
Vitesse.l = 90 ; Temps du Delay() qui ralentit/augmente l'animation.
Texte.s = "Ceci est un texte qui ondule"
Global Texte,Y.l,Angle.l,Hauteur,Vitesse
; Création de la fenêtre - en plein écran le mouvement est plus lisse
OpenWindow(0,0,0,220,70,#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered,"Texte")
OpenWindowedScreen(WindowID(),0,0,220,70,0,0,0)
Procedure Affichage()
FlipBuffers()
ClearScreen(0,0,0)
EndProcedure
Procedure Ondulation()
X.l = 10
StartDrawing(ScreenOutput()) ; Pour pouvoir utiliser les commandes des dessin 2D.
DrawingMode(1) ; On selectionne le mode pour ne pas avoir de fond derrière es lettres.
FrontColor(255,0,0) ; On change la couleur.
For i = 1 To Len(Texte) ; On repette pour chaque lettre.
X + (TextLength(Texte) / Len(texte)) ; On avance en X de la taille d'un caractère.
Angle + 1 ; On augmente l'angle d'un.
If Angle > 360 ; si il est supérieur à 360 (un tour) on le remet à 0. On pourrait ne pas mettre
; ce controle mais au bout d'un certain temps la valeur maximale des long serait dépassée.
Angle = 0
EndIf
Locate(X,27 + (Sin(Angle) * Hauteur)) ; On se place en X et en Y.
; Sin(Angle) sert à donner le décalage de chaque lettre, on multiplie par Hauteur pour l'augmenter.
DrawText(Mid(Texte,i,1)) ; On affiche la lettre.
Next i ; et on recommence...
StopDrawing() ; On signife que l'on arrête les fonctions dessin 2D.
EndProcedure
Repeat
Select WindowEvent()
Case #PB_Event_CloseWindow
Sortie.b = 1
EndSelect
Ondulation()
Affichage()
Delay(Vitesse)
Until Sortie = 1
End
Publié : jeu. 19/août/2004 0:28
par Dr. Dri
sympa, une suggestion (en espérant me faire comprendre)
ton texte ondule selon une hauteur, on considere que c'est le diametre du cercle sur le quel le texte ondule...
avec ca et les fonctions TextLength() et Mid() tu peux changer ton effet de facon à ce que ca ondule aussi à l'horizontale...
je vais essayer de faire un exemple... mais avec la hauteur des caracters c'est pas évident ^^
au lieu de
Dri
Publié : jeu. 19/août/2004 1:27
par garzul

Vous voyez que je peux donner des idéés a quelqu'un .
Sinon j'ai fait un programme avec le code d'oliv sa fait un effet matrix.
ps : Oliv dis moi ce que t'en pense !
Voici le code : (pas commenter et brouillon et ATTENTION AU YEUX )
Code : Tout sélectionner
InitSprite() And InitKeyboard()
;- Declarations
; Constantes
; Structures
; Listes
; Buffer
; Variables
Hauteur.l = 700 ; Multiplicateur de Sin() qui augmente ou réduit le débatement du texte.
Vitesse.l = 1 ; Temps du Delay() qui ralentit/augmente l'animation
Texte.s = "010101010101010101010101010101010101010101010101010110101010101010010101010101010101010101010100101010101010101010101010101010101010101001"
Texte2.s = "101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010100101010101010101010101010100"
Texte3.s = "010101010101010101010101010101010101010101010101010110101010101010010101010101010101010101010100101010101010101010101010101010101010101001"
Texte4.s = "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
Texte5.s = "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
Global Texte , Texte2 , Texte3 , Texte4 , Texte5 , Y.l , Angle.l , Hauteur , Vitesse
LoadFont (0, "Courier", 15)
; Création de la fenêtre
OpenScreen(1024,768,32,"texte")
Procedure Affichage()
FlipBuffers()
ClearScreen(0,0,0)
EndProcedure
Procedure Ondulation()
X.l = 0
StartDrawing(ScreenOutput())
DrawingMode(1)
DrawingFont(UseFont(0))
FrontColor($7B,$E0,$84)
For i = 1 To Len(Texte)
X + (TextLength(Texte) / Len(texte))
Angle + 1
If Angle > 360
Angle = 0
EndIf
Locate(X,695 + (Sin(Angle) * Hauteur))
DrawText(Mid(Texte,i,1))
Next i
StopDrawing()
EndProcedure
Procedure Ondulation2()
X.l = 0
StartDrawing(ScreenOutput())
DrawingMode(1)
DrawingFont(UseFont(0))
FrontColor($7B,$E0,$84)
For i = 1 To Len(Texte2)
X + (TextLength(Texte2) / Len(texte2))
Angle + 1
If Angle > 360
Angle = 0
EndIf
Locate(X,620 + (Sin(Angle) * Hauteur))
DrawText(Mid(Texte2,i,1))
Next i
StopDrawing()
EndProcedure
Procedure Ondulation3()
X.l = 0
StartDrawing(ScreenOutput())
DrawingMode(1)
DrawingFont(UseFont(0))
FrontColor($7B,$E0,$84)
For i = 1 To Len(Texte3)
X + (TextLength(Texte3) / Len(texte3))
Angle + 1
If Angle > 360
Angle = 0
EndIf
Locate(X,650 + (Sin(Angle) * Hauteur))
DrawText(Mid(Texte3,i,1))
Next i
StopDrawing()
EndProcedure
Procedure Ondulation4()
X.l = 0
StartDrawing(ScreenOutput())
DrawingMode(1)
DrawingFont(UseFont(0))
FrontColor($7B,$E0,$84)
For i = 1 To Len(Texte4)
X + (TextLength(Texte4) / Len(texte4))
Angle + 1
If Angle > 360
Angle = 0
EndIf
Locate(X,700 + (Sin(Angle) * Hauteur))
DrawText(Mid(Texte4,i,1))
Next i
StopDrawing()
EndProcedure
Procedure Ondulation5()
X.l = 0
StartDrawing(ScreenOutput())
DrawingMode(1)
DrawingFont(UseFont(0))
FrontColor($7B,$E0,$84)
For i = 1 To Len(Texte5)
X + (TextLength(Texte5) / Len(texte5))
Angle + 1
If Angle > 360
Angle = 0
EndIf
Locate(X,700 + (Sin(Angle) * Hauteur))
DrawText(Mid(Texte5,i,1))
Next i
StopDrawing()
EndProcedure
Repeat
Ondulation()
Ondulation2()
Ondulation3()
Ondulation4()
Ondulation5()
Affichage()
Delay(Vitesse)
ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)
ps : Merci Oliv

[/code][/quote]
Publié : jeu. 19/août/2004 8:54
par Backup
l'effet machine a ecrire !!
Code : Tout sélectionner
InitSprite()
; Variables
Hauteur.l = 2 ; Multiplicateur de Sin() qui augmente ou réduit le débatement du texte.
Vitesse.l = 20 ; Temps du Delay() qui ralentit/augmente l'animation.
Texte.s = "Ceci est un texte qui ondule"
Global Texte,y.l,Angle.l,Hauteur,Vitesse
; Création de la fenêtre - en plein écran le mouvement est plus lisse
OpenWindow(0,0,0,220,70,#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered,"Texte")
OpenWindowedScreen(WindowID(),0,0,220,70,0,0,0)
Procedure Affichage()
FlipBuffers()
ClearScreen(0,0,0)
EndProcedure
Procedure Ondulation()
x.l = 10
StartDrawing(ScreenOutput()) ; Pour pouvoir utiliser les commandes des dessin 2D.
DrawingMode(1) ; On selectionne le mode pour ne pas avoir de fond derrière es lettres.
FrontColor(255,0,0) ; On change la couleur.
For i = 1 To Len(Texte) ; On repette pour chaque lettre.
x + (TextLength(Texte) / Len(Texte)) ; On avance en X de la taille d'un caractère.
Angle + 1 ; On augmente l'angle d'un.
If Angle > 360 ; si il est supérieur à 360 (un tour) on le remet à 0. On pourrait ne pas mettre
; ce controle mais au bout d'un certain temps la valeur maximale des long serait dépassée.
Angle = 0
EndIf
Locate(x,27 + (Sin(Angle) * Hauteur)/Sin(Angle)/Hauteur) ; On se place en X et en Y.
; Sin(Angle) sert à donner le décalage de chaque lettre, on multiplie par Hauteur pour l'augmenter.
DrawText(Mid(Texte,i,1)) ; On affiche la lettre.
Next i ; et on recommence...
StopDrawing() ; On signife que l'on arrête les fonctions dessin 2D.
EndProcedure
Repeat
Select WindowEvent()
Case #PB_Event_CloseWindow
Sortie.b = 1
EndSelect
Ondulation()
Affichage()
Delay(Vitesse)
Until Sortie = 1
End
Publié : jeu. 19/août/2004 10:07
par Le Soldat Inconnu
je me suis permit de modifier ton code pour faire onduler le texte
Code : Tout sélectionner
InitSprite()
; Variables
#HauteurSin.l = 20 ; Coef qui joue sur la hauteur de la sinusoide
#LargeurSin.l = 20 ; Coef qui joue sur la largeur de la sinusoide
#VitesseAngle.f = 2 * #pi / 50 ; vitesse de modification de l'angle de départ du texte
#Vitesse.l = 25 ; Temps du Delay() qui ralentit/augmente l'animation.
#Texte.s = "Ceci est un texte qui ondule"
Global Angle.f, FontID
; Création de la fenêtre - en plein écran le mouvement est plus lisse
OpenWindow(0, 0, 0, 250, 100, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered, "Texte")
OpenWindowedScreen(WindowID(), 0, 0, 250, 100, 0, 0, 0)
Procedure Ondulation(Texte.s)
StartDrawing(ScreenOutput()) ; Pour pouvoir utiliser les commandes des dessin 2D.
DrawingMode(1) ; On selectionne le mode pour ne pas avoir de fond derrière les lettres.
FrontColor(255, 255, 255) ; On change la couleur.
DrawingFont(FontID()) ; On change la police
Angle + #VitesseAngle ; Angle de départ de la sinusoide en radian
If Angle >= 2 * #pi
Angle = 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(Angle + 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
Locate(PosX, PosY)
DrawText(Lettre)
PosX + TextLength(Lettre)
Next
StopDrawing() ; On signife que l'on arrête les fonctions dessin 2D.
EndProcedure
;- Début du programme
; On charge une police
FontID = LoadFont(0, "Tahoma", 10, #PB_Font_HighQuality)
Repeat
Event = WindowEvent()
ClearScreen(0, 0, 0)
Ondulation(#Texte)
FlipBuffers()
Delay(#Vitesse)
Until Event = #PB_Event_CloseWindow
End
Publié : jeu. 19/août/2004 10:18
par Dr. Dri
Et voila Regis, t'as fait exactement ce que je suggérait à Oliv
comme ca je suis sûr d'être compris :p
Dri
Publié : jeu. 19/août/2004 11:21
par Oliv
ahh, j'avais pas regardé l'aide, je savais pas que la fonction était en radians

. Sinon je n'aurais pas fait exactement comme ça, mais dans le même genre

.
@Dobro : Chouette ton animation
@Garzul : Utilise des paramètres pour tes fonctions, ça évite d'en refaire 5.
@Soldat Innconu : Par contre, je vais remodifier ton code pour remettre les paramettres en variables (ou à la rigueur en paramètre de la procédure) car une constante je peux pas changer dans un prog.
Je peux mettre vos codes dans une lib ?
Publié : jeu. 19/août/2004 13:21
par Le Soldat Inconnu
Pas de prob :
tu me donneras la dernière version, je la mettrai sur Codes-FR, si ça te gène pas

Publié : jeu. 19/août/2004 14:42
par Oliv
ok
Publié : jeu. 19/août/2004 19:47
par Backup
effet lac d'annecy !!
Code : Tout sélectionner
LoadFont(1, "arial", 50 ,#PB_Font_Italic )
LoadFont(2, "arial", 50 )
UseFont(1)
Resultat = InitSprite()
Global Angle,amplitude
amplitude=5
Texte.s="Le Lac d'annecy !"
WindowID = OpenWindow(1, 50, 50, 640, 200, #PB_Window_SystemMenu|#PB_Window_MinimizeGadget , "hello")
OpenWindowedScreen(WindowID, 0, 0, 640, 200, 1, 0, 0)
CreateImage(100, 640, 100)
StartDrawing( ImageOutput())
FrontColor($0,$FF,$FF)
BackColor(0, 0, 0)
UseFont(1)
DrawingFont(FontID())
DrawingMode(1)
Locate(0, 0)
DrawText(Texte.s)
StopDrawing()
For t=0 To 100
GrabImage(100, t, 0, t, 640,1)
Next t
Repeat
For y= 0 To 100
StartDrawing(ScreenOutput())
UseFont(2)
DrawingFont(FontID())
DrawingMode(1)
FrontColor($95,$25,$BA)
BackColor(0, 0, 0)
Locate(40, 0)
DrawText(Texte.s)
Angle+1 :If Angle=360*10: Angle=0 :EndIf
x+(Sin(Angle)* amplitude)
DrawImage( UseImage(y), x+y, y+50,640,1)
StopDrawing()
Next y
FlipBuffers(50)
ClearScreen(0, 0, 0)
Event=WindowEvent()
delay(1)
Until Event=#PB_Event_CloseWindow
Publié : jeu. 19/août/2004 21:39
par Le Soldat Inconnu
bof, je préfère la mer
en passant j'ai corrigé un truc, il manquait un Event = WindowEvent()
Code : Tout sélectionner
LoadFont(1, "arial", 50 ,#PB_Font_Italic )
LoadFont(2, "arial", 50 )
UseFont(1)
Resultat = InitSprite()
Global Angle,amplitude
amplitude=5
Texte.s="Le Lac d'annecy !"
WindowID = OpenWindow(1, 50, 50, 640, 200, #PB_Window_SystemMenu|#PB_Window_MinimizeGadget , "hello")
WindowID = WindowID(1)
OpenWindowedScreen(WindowID, 0, 0, 640, 200, 1, 0, 0)
Event=WaitWindowEvent()
CreateImage(100, 640, 100)
StartDrawing( ImageOutput())
FrontColor($0,$FF,$FF)
BackColor(0, 0, 0)
UseFont(1)
DrawingFont(FontID())
DrawingMode(1)
Locate(0, 0)
DrawText(Texte.s)
StopDrawing()
For t=0 To 100
GrabImage(100, t, 0, t, 640,1)
Next t
Repeat
For y= 0 To 100
StartDrawing(WindowOutput())
UseFont(2)
DrawingFont(FontID())
DrawingMode(1)
FrontColor($95,$25,$BA)
BackColor(0, 0, 0)
Locate(40, 0)
DrawText(Texte.s)
Angle+1 :If Angle=360*10: Angle=0 :EndIf
x+(Sin(Angle)* amplitude)
DrawImage( UseImage(y), x+y, y+50,640,1)
StopDrawing()
Next y
FlipBuffers(50)
ClearScreen(0, 0, 0)
Event = WindowEvent()
Until Event=#PB_Event_CloseWindow
Publié : jeu. 19/août/2004 21:40
par Backup
encore mieux !!
Code : Tout sélectionner
LoadFont(1, "arial", 50 ,#PB_Font_Italic )
LoadFont(2, "arial", 50 )
UseFont(1)
Resultat = InitSprite()
Global Angle,amplitude
amplitude=2
Texte.s="Le Lac d'annecy !"
WindowID = OpenWindow(1, 50, 50, 640, 200, #PB_Window_SystemMenu|#PB_Window_MinimizeGadget , "hello")
OpenWindowedScreen(WindowID, 0, 0, 640, 200, 1, 0, 0)
CreateImage(100, 640, 100)
StartDrawing( ImageOutput())
FrontColor($0,$FF,$FF)
BackColor(0, 0, 0)
UseFont(1)
DrawingFont(FontID())
DrawingMode(1)
Locate(0, 0)
DrawText(Texte.s)
StopDrawing()
For t=0 To 100
GrabImage(100, t, 0, t, 640,1)
Next t
Repeat
For y= 0 To 100
StartDrawing(WindowOutput())
UseFont(2)
DrawingFont(FontID())
DrawingMode(1)
FrontColor($95,$25,$BA)
BackColor(0, 0, 0)
Locate(40, 0)
DrawText(Texte.s)
Angle+1 :If Angle=360*10: Angle=0 :EndIf
x+(Sin(Angle*2*3.1415926/50)* amplitude)
DrawImage( UseImage(y), x+y, y+50,640,1)
StopDrawing()
Next y
FlipBuffers(50)
ClearScreen(0, 0, 0)
Event=WindowEvent()
delay(1)
Until Event=#PB_Event_CloseWindow
Publié : jeu. 19/août/2004 21:52
par Oliv
Publié : jeu. 19/août/2004 21:54
par Backup
j'y ai vecu les 12 derniere année !!

j'ai mem ete une figure locale puisque j'y ai ete commercant !!
(annecy le vieux )
ps le pere bize a talloire !
ps2: merci regis !! pour l'event !! c'est un oublis !!
tout comme le radiant !! moi aussi je me suis fait avoir avec ça !!
Voici l'effet Canal +
Code : Tout sélectionner
LoadFont(1, "arial", 50 ,#PB_Font_Italic )
LoadFont(2, "arial", 50 )
UseFont(1)
Resultat = InitSprite()
Global Angle,amplitude
amplitude=2
Texte.s="Le Lac d'annecy !"
WindowID = OpenWindow(1, 50, 50, 640, 200, #PB_Window_SystemMenu|#PB_Window_MinimizeGadget , "hello")
OpenWindowedScreen(WindowID, 0, 0, 640, 200, 1, 0, 0)
CreateImage(100, 640, 100)
StartDrawing( ImageOutput())
FrontColor($0,$FF,$FF)
BackColor(0, 0, 0)
UseFont(1)
DrawingFont(FontID())
DrawingMode(1)
Locate(0, 0)
DrawText(Texte.s)
StopDrawing()
For t=0 To 100
GrabImage(100, t, 0, t, 640,1)
;GrabSprite(t, 0, 0, 100, 1)
Next t
Repeat
For y= 0 To 100
StartDrawing(WindowOutput())
Angle+1 :If Angle=360*10: Angle=0 :EndIf
x=1+(Sin(Angle)* amplitude*Random(14))
DrawImage( UseImage(y), x+y, y+50,640,1)
StopDrawing()
dep+1 :If dep>640 :dep=-100:EndIf
Next y
FlipBuffers(50)
ClearScreen(0, 0, 0)
Event=WindowEvent()
delay(1)
Until Event=#PB_Event_CloseWindow
Publié : jeu. 19/août/2004 22:33
par Backup
voici un effet pseudo 3D l'ondulation semble aller dans la profondeur
Code : Tout sélectionner
LoadFont(1, "arial", 50 )
LoadFont(2, "arial", 50 )
UseFont(1)
Resultat = InitSprite()
Global Angle,amplitude
amplitude=10
Texte.s="Le Lac d'annecy !"
WindowID = OpenWindow(1, 50, 50, 640, 200, #PB_Window_SystemMenu|#PB_Window_MinimizeGadget , "hello")
WindowID = WindowID(1)
OpenWindowedScreen(WindowID, 0, 0, 640, 200, 1, 0, 0)
CreateImage(100, 640, 100)
StartDrawing( ImageOutput())
FrontColor($0,$FF,$FF)
BackColor(0, 0, 0)
UseFont(1)
DrawingFont(FontID())
DrawingMode(1)
Locate(0, 0)
DrawText(Texte.s)
StopDrawing()
For t=0 To 100
GrabImage(100, t, 0, t, 640,1)
Next t
Repeat
For y= 0 To 100
StartDrawing(WindowOutput())
StartDrawing(WindowOutput())
UseFont(2)
DrawingFont(FontID())
DrawingMode(1)
FrontColor($95,$25,$BA)
BackColor(0, 0, 0)
Locate(40, 0)
DrawText(Texte.s)
Angle+1 :If Angle=360*10: Angle=0 :EndIf
x=1+(Sin(Angle*2*3.1415926/50)* amplitude)
DrawImage( UseImage(y), x+40, y+20*x/25+50,640,1)
StopDrawing()
dep+1 :If dep>640 :dep=-100:EndIf
Next y
FlipBuffers(50)
ClearScreen(0, 0, 0)
Event=WindowEvent()
delay(1)
Until Event=#PB_Event_CloseWindow