1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
| #Tout d'abord, quelques fonctions utiles.
#dl désigne de délair entre chaque lettre. Si vous le mettez à 0 toutes les lettres arriverons en même temps.
#spirale est a utiliser la plupart du temps. Balancez lui un texte, avec les lignes, et ce sera tout.
def spirale(txt="abcdef",dl=0,x=320,y=200)
$spi=[]
txt+="\n"
u=0
for i in 0..txt.size-1
if txt[i..i]=="\n"
$spi[$spi.size]=Spirale.new(txt[u..i],dl,x,y+34*$spi.size,400,1.05,txt[0..u].size)
u=i
end
end
for i in 0..$spi.size-1
$spi[i].y-=17*$spi.size
end
end
#fermer spirale lance l'éloignement des lettres. Attention ce n'est pas instanné ! Lorsque c'est fini, la fonction renvoie true. Mettez donc une boucle qui ne se finit que lorsque fermer_spriale==true
def fermer_spirale
f=0
for i in 0..$spi.size-1
$spi[i].fermeture=true
if $spi[i].fin
f+=1
end
end
if f==$spi.size
$spi=[]
return true
end
end
#spiralesp est une variante de spirale qui n'enlève pas le texte précédent. A utiliser pour rajouter un texte après un autre. (je ne l'ai testé que pour une ligne de rajout)
def spiralesp(txt="abcdef",dl=0,x=320,y=200)
txt+="\n"
u=0
for i in 0..txt.size-1
if txt[i..i]=="\n"
$spi[$spi.size]=Spirale.new(txt[u..i],dl,x,y+34*$spi.size)
u=i
end
end
end
class Spirale #la classe à proprement parler
attr_accessor:fermeture
attr_accessor:fin
attr_accessor:y
def dispose
@disposition=true
end
def initialize(txt="JVF2",dl=0,x=320,y=240,r=400,dr=1.05,dt=0)
@t=0
@dl=dl.to_f
txt2=" "
txt2+=txt
txt=txt2
@fermeture=false
@rayon=[]
@lettres=[]
@dr=dr
@x=x
@y=y
@taille=[]
for i in 0..txt.size-1
# Pour ceux qui s'y connaissent, j'ai fait un éssai
#avec un buffer unique où je drawais les lettres,
#mais il s'est avéré que celà ramais 300 fois plus !
#J'ai donc laisse la gestion avec autant de lettres que de sprites.
#Celà ne rame à priori pas pendant le mouvement, mais une poignée d'instants au chargement
@rayon[i]=r+(8*(dt+i))**2
#la ligne ci dessus est l'équation régissant l'écart entre les lettres en fonctions de dl
@lettres[i]=Sprite.new
@lettres[i].z=50
@lettres[i].x=1000
@lettres[i].y=1000
@lettres[i].bitmap=Bitmap.new(50,50)
@lettres[i].bitmap.font.name ="Times New Roman","Arial","Adorable"
@lettres[i].bitmap.font.size =40
if $scene.is_a?(Scene_Title) # si vous voulez une police spéciale à l'écran titre....
@lettres[i].bitmap.font.name ="Adorable" ,"Times New Roman","Arial"
@lettres[i].bitmap.font.size =32
end
lettre=txt[i..i]
if lettre=="\303"
lettre=txt[i..i+1]
end
@lettres[i].bitmap.font.color.set(255, 255, 255)
@lettres[i].bitmap.draw_text(0, 0,50,50,lettre)
@taille[i]=@lettres[i].bitmap.text_size(txt[0..i-1]).width
@x=x-@lettres[i].bitmap.text_size(txt).width/2
end
end
def maj
if @lettres==nil
return
else
@t+=1
for i in 0..@lettres.size-1
if @fermeture==false
@rayon[i]/=@dr
if @rayon[i]<1
@rayon[i]/=4.0
if @rayon[i]<0.01
@rayon[i]=0
end
end
else
@rayon[i]+=0.1
@rayon[i]*=@dr
end
tps=8*i+@t/20.0
@lettres[i].x=@x+@taille[i]+@rayon[i]*Math.cos(@dl*i/(3.14)+@t/20.0)
@lettres[i].y=@y+@rayon[i]* Math.sin(@dl*i/(3.14)+@t/20.0)
if @rayon[0]>650 and @fermeture==true or @disposition
for i in 0..@lettres.size-1
@lettres[i].bitmap.dispose
end
@fin=true
end
end
end
end
end |