non ... pas fini
j'ai remis au gout du jour une procedure que j'avais dans mes bagages
cette procedure permet d'afficher a volonté un text en Sinus-Scroll
elle genere toute seule un sprite "ecran" et c'est dans ce sprite qu'a lieu le Scroll
explication :
;spr = numero d'un sprite .. il sera cree et detruit par cette procedure )
; ce sprite contiendra le texte$ , c'est le texte$ qui bouge... pas le sprite il me sert d'ecran !
; X;Y = la coodonée d'affichage du sprite "ecran" qui contient donc le text
; taille_x = la taille en X du Sprite "Ecran" .. en principe la taille_y est calculé automatiquement ... (en principe )
; xt = c'est le deplacement horizontal du text dans le sprite "ecran" , si on veux que ça scroll => xt=xt-2
; Texte$ = le text a afficher
; Couleur.l =
si egale a 0 ce sera un degradé mouvant dans la fonte !!! ..... sinon ,
ce sera la couleur choisie
les autres parametres (hauteur du scroll, longeur, etc ... ) sont interne a la procedure ... je ne voulais pas faire une procedure avec 20 parametres
Exemple
Code : Tout sélectionner
;*******************************************************************************************************
;- déclarations des procedures
;*******************************************************************************************************
Declare Ondulation(spr,x,y,taille_x,xt,Texte$,couleur.l)
Declare msg_erreur(Chaine$)
;*******************************************************************************************************
;;DisableDebugger
;- test du materiel
;*******************************************************************************************************
If InitSprite()=0
msg_erreur("impossible d'initialiser les sprites"+Chr(10)+" le prg va quitter ")
End
EndIf
If InitMouse()=0
msg_erreur("impossible d'initialiser la souris"+Chr(10)+" le prg va quitter ")
End
EndIf
If InitKeyboard()=0
msg_erreur("impossible d'initialiser le clavier"+Chr(10)+" le prg va quitter ")
End
EndIf
;*******************************************************************************************************
;-initialisations constante structure tableaux variables
;*******************************************************************************************************
Enumeration
#win
EndEnumeration
Enumeration
#degrade
#boule
EndEnumeration
Enumeration
#police
EndEnumeration
Largeur_screen=1024
Hauteur_screen=768
Structure degrade
x.w
y.w
sensx.l
sensy.l
EndStructure
degrade.degrade
degrade\sensy.l=10
degrade\sensx.l=0
degrade\x.w=0
degrade\y.w=0
Largeur_degrade=Largeur_screen
Hauteur_degrade=Hauteur_screen
Structure boule
x.w
y.w
sensx.f
sensy.f
EndStructure
Global Dim boule.boule(500)
For i=0 To 499
boule(i)\x.w=Random(largeur_screen)
boule(i)\y.w=Random(hauteur_screen)
Next i
; ****************************************
Structure sprite
x.w
y.w
sensx.l
sensy.l
EndStructure
sprite.sprite
sprite\sensy.l=0
sprite\sensx.l=-10
sprite\x.w=-Largeur_screen
sprite\y.w=hauteur_screen/2
Largeur_sprite=500
Hauteur_sprite=100
;-ouvre ecran
;*******************************************************************************************************
OpenWindow(#win,1,1,Largeur_screen,Hauteur_screen,"test",#PB_Window_SystemMenu |#PB_Window_ScreenCentered )
OpenWindowedScreen(WindowID(#win),1,1,Largeur_degrade, Hauteur_degrade,1, 1,1,#PB_Screen_WaitSynchronization )
KeyboardMode(1)
SystemParametersInfo_(#SPI_SETFONTSMOOTHING,#False,0,0)
;*******************************************************************************************************
LoadFont(#Police, "Bauhaus 93", 50 ,#PB_Font_Bold)
;**************************************************************************************************
texte$="By Dobro and Fig ..."
;Affiche un fond
CreateSprite(#boule,32,32)
StartDrawing(SpriteOutput(#boule))
DrawingFont(FontID(#Police))
Largeur_sprite=TextWidth(texte$)
Hauteur_sprite=TextHeight(texte$)
DrawingMode(#PB_2DDrawing_Gradient)
BackColor($E65352)
FrontColor($0)
CircularGradient(16,16, 16)
Circle(16,16,16)
StopDrawing()
;
;-boucle principale
Repeat
WindowEvent()
;- Examine le materiel
;*******************************************************************************************************
ExamineKeyboard()
ExamineMouse()
;*******************************************************************************************************
;- logique de deplacement
;*******************************************************************************************************
degrade\y.w=degrade\y.w+degrade\sensy.l
; degrade\x.w=degrade\x.w+degrade\sensx.l
;* Nécessaire si on veut un dégradé changeant horizontalement en plus...
; If degrade\x.w>largeur_screen/2 Or degrade\x.w<1
; degrade\sensx*-1
; EndIf
If degrade\y.w>Hauteur_sprite<<2 Or degrade\y.w<0
degrade\sensy*-1
EndIf
; *************
;-deplacement
;*************
sprite\y.w=sprite\y.w+sprite\sensy.l
sprite\x.w=sprite\x.w+sprite\sensx.l
If sprite\y.w>(hauteur_screen-hauteur_sprite-10) Or sprite\y.w<10
sprite\sensy*-1
EndIf
If sprite\x.w<-Largeur_Sprite
sprite\x.w=Largeur_Screen+Largeur_Sprite
EndIf
;*******************************************************************************************************
;-changement du texte si besoin
;*******************************************************************************************************
texte$="By Dobro and Fig ..."
;*******************************************************************************************************
;-affichage des sprites
;*******************************************************************************************************
;Affiche un fond
For i=1 To 500
boule(i)\sensx.f=Random(2)+ -1
boule(i)\x=boule(i)\x+boule(i)\sensx.f
boule(i)\sensy.f=Random(2)+ -1
boule(i)\y=boule(i)\y+boule(i)\sensy.f
DisplayTransparentSprite(#boule,boule(i)\x,boule(i)\y)
Next i
;affiche le scroll
taille_x=largeur_screen
xt=xt-3; on deplace le text dans le sprite
if xt<=-largeur_screen
xt=largeur_screen
Endif
y=hauteur_screen/2
x=1
couleur.l= $0 ; rgb(255,0,255)
Ondulation(#degrade,x,y,taille_x,xt,Texte$,couleur.l)
FlipBuffers() ; affiche le resultat a l'ecran !
ClearScreen(#Black) ; nettoie l'ecran apres affichage
Until KeyboardPushed(#PB_Key_Escape)
SystemParametersInfo_(#SPI_SETFONTSMOOTHING,#True,0,0)
End
; ********* Zone des sous-programme ******************
; **************** Zone des procedures ******************
Procedure Ondulation(spr,x,y,taille_x,xt,Texte$,couleur.l)
; procedure realisé par OLIV l'ondulation
; et DOBRO pour la mise en couleur... et la sortie sur Sprite
; ******* explication des parametres ***************
;spr = numero d'un sprite .. il sera cree et detruit par cette procedure )
; ce sprite contiendra le texte$ , c'est le texte$ qui bouge... pas le sprite il me sert d'ecran !
; X;Y = la coodonée d'affichage du sprite "ecran" qui contient donc le text
; taille_x = la taille en X du Sprite "Ecran" .. en principe la taille_y est calculé automatiquement ...
; xt = c'est le deplacement horizontal du text dans le sprite "ecran" , si on veux que ça scroll => x=x-2
; Texte$ = le text a afficher
; Couleur.l = si egale a 0 ce sera un degradé mouvant dans la fonte !!! ..... sinon , ce sera la couleur choisie
memposy=taille_y
static angleo.f ; ceci anime les lettres
#VitesseAngle = 1 * #PI / 50 ; vitesse de modification de l'angle de départ du texte
#HauteurSin = 50 ; Coef qui joue sur la hauteur de la sinusoide
#LargeurSin = 50 ; Coef qui joue sur la largeur de la sinusoide
taille_y=#HauteurSin*4
yt=#HauteurSin*2
If createsprite(spr,taille_x,taille_y)
StartDrawing(SpriteOutput(img))
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 = #HauteurSin * Sin (angleo + PosX / #LargeurSin )-taille_y/4 ; on calcul la position en Y de la lettre
if couleur.l=$0
DrawingMode(#PB_2DDrawing_Gradient|#PB_2DDrawing_Transparent)
BackColor($0)
For i=0 To 255
GradientColor(0.4, RGB(i,0,0))
GradientColor(0.8,RGB(0,i,0))
GradientColor(0.16,RGB(0,0,i))
GradientColor(0.32,RGB(0,i,i))
GradientColor(0.64,RGB(i,i,0))
Next i
LinearGradient(0, 0, taille_x,taille_y)
else
FrontColor ( couleur.l ) ; On change la couleur.
Endif
;Box(0, 0, 1024, 768)
DrawText (xt+PosX, yt+PosY,Lettre)
PosX + TextWidth (Lettre)
Next
StopDrawing () ; On signife que l'on arrête les fonctions dessin 2D.
DisplaytransparentSprite( spr,x,y)
FreeSprite(spr)
Endif
EndProcedure
Procedure msg_erreur(Chaine$)
MessageRequester("erreur", Chaine$, #PB_MessageRequester_Ok )
EndProcedure
; *************************************************************
; Epb