| | Scrolling texte sinusoidal | |
| | Auteur | Message |
---|
Invité Invité
| Sujet: Scrolling texte sinusoidal Lun 4 Jan 2010 - 18:41 | |
| tout est dans le titre - Code:
-
//draw_text_sinus(x,y,string,freq,ceil,ang,move,xscale,yscale,color1,color2,alpha)
var xx,yy,str,freq,cei,ang,move,xs,ys,co1,co2,al,lt;
xx=argument0 yy=argument1 str=argument2 freq=argument3 cei=argument4 ang=argument5 move=argument6 xs=argument7 ys=argument8 c1=argument9 c2=argument10 al=argument11
lt=string_length(str)
for (i=0; i<lt; i+=1;) { draw_text_ext_transformed_color(xx+string_width(string_copy(str,0,i))*xs, yy+lengthdir_y(cei,ang+i*(360*freq/lt))*ys,string_copy(str,i+1,1) ,-1,-1,xs,ys,lengthdir_y(cei,ang+i*(360*freq/lt))*move,c1,c1,c2,c2,al) } la version ultra optimisé d'onilink (3X (et quelques) plus de rapidité ) - Code:
-
//draw_text_sinus(x,y,string,freq,ceil,ang,move,xscale,yscale,color1,color2,alpha) var i, tt;
if( !variable_local_exists('__DCreate') ) { __DCreate = 1 __Strl[0] = 0 __Len = string_length(argument2) for(i=0 ; i<__Len ; i+=1) { __Strc[i] = string_copy(argument2, i+1, 1) __Strl[i+1] = __Strl[i] + string_width(__Strc[i]) } } tt = 360*argument3/__Len
for (i=0; i<__Len; i+=1;) { ly = lengthdir_y( argument4, argument5 + i*tt ) draw_text_ext_transformed_color(argument0 + __Strl[i]*argument7 , argument1 + ly*argument8, __Strc[i] , -1, -1, argument7, argument8, ly*argument6, argument9, argument9, argument10, argument10, argument11) }
Dernière édition par shm39 le Jeu 24 Juin 2010 - 18:47, édité 4 fois |
| | | bibi675 Utilisateur confirmé: Rang *****
Messages : 2456 Localisation : Oise Projet Actuel : Jeu par navigateur original
| Sujet: Re: Scrolling texte sinusoidal Lun 4 Jan 2010 - 19:03 | |
| Excellent, pas très léger niveau perfs mais ça m'étonnerait que l'on puisse faire mieux. |
| | | Invité Invité
| Sujet: Re: Scrolling texte sinusoidal Lun 4 Jan 2010 - 19:11 | |
| merci , et oui justement c'est normal le script execute un draw_text pour chaque caractère :gniah: |
| | | red-error Utilisateur confirmé: Rang ****
Messages : 1015 Projet Actuel :
| Sujet: Ce message est ironique ^-^ Mar 5 Jan 2010 - 22:08 | |
| Y'aurait moyent de l'optimiser en mettant tous les caractères à même auteur dans un même draw. Bien sûr. :gniah:
Dernière édition par red-error le Lun 8 Fév 2010 - 19:47, édité 1 fois |
| | | [TheDarkTiger] Modérateur
Messages : 7420 Localisation : Essonne
| Sujet: Re: Scrolling texte sinusoidal Lun 8 Fév 2010 - 0:54 | |
| non déjà avec l'espacement des cratères, ça boufferait presque plus à tout calculer, ensuite, il faudrait remplir d'espaces, et c'est pas dit que ça soit mieux ... |
| | | onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Scrolling texte sinusoidal Lun 8 Fév 2010 - 20:10 | |
| ...tout est possible ^^ J'ai reussi a rendre la fonction 3 fois plus rapide en diminuant les calculs, voila ce que ça donne : - Spoiler:
- Code:
-
//draw_text_sinus(x,y,string,freq,ceil,ang,move,xscale,yscale,color1,color2,alpha)
var xx,yy,str,freq,cei,ang,move,xs,ys,co1,co2,al,lt; var i,tt,ango;
xx = argument0 yy = argument1 str = argument2 freq = argument3 cei = argument4 ang = argument5 move = argument6 xs = argument7 ys = argument8 c1 = argument9 c2 = argument10 al = argument11
lt=string_length(str)
if( !variable_local_exists('d_create_3141592') ) { d_create_3141592 = 1 strl_3141592[0] = 0 for(i=0 ; i<lt ; i+=1) { strc_3141592[i] = string_copy(str,i+1,1) strl_3141592[i+1] = strl_3141592[i] + string_width(strc_3141592[i]) } }
tt = 2*3.1415*freq/lt ango = 3.1415*ang/180
for (i=0; i<lt; i+=1;) { ly = -sin( ango + i*tt ) * cei draw_text_ext_transformed_color(xx + strl_3141592[i]*xs , yy + ly*ys, strc_3141592[i] , -1, -1, xs, ys, ly*move, c1, c1, c2, c2, al) }
|
| | | Invité Invité
| Sujet: Re: Scrolling texte sinusoidal Lun 8 Fév 2010 - 20:38 | |
| eh ben... c'est un peu comme dire : "Eh regardez moi ! mon zizi est 3 fois plus grand que le sien, tin tin din !" 'fin je sais que c'était de bonne foi... mais bon, je vais regarder ton script de plus près, merci pour ton effort onilink. - Spoiler:
|
| | | onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Scrolling texte sinusoidal Lun 8 Fév 2010 - 21:01 | |
| - shm31 a écrit:
- eh ben... c'est un peu comme dire : "Eh regardez moi ! mon zizi est 3 fois plus grand que le sien, tin tin din !"
'fin je sais que c'était de bonne foi... mais bon, je vais regarder ton script de plus près, merci pour ton effort onilink.
- Spoiler:
OMG ! Quelle comparaison Sinon ben ça m'éclate d'optimiser des fonctions, chacun ses passes temps :p_lol: |
| | | bibi675 Utilisateur confirmé: Rang *****
Messages : 2456 Localisation : Oise Projet Actuel : Jeu par navigateur original
| Sujet: Re: Scrolling texte sinusoidal Mar 9 Fév 2010 - 10:24 | |
| Tu dois t'éclater tous les soirs toi. |
| | | Invité Invité
| Sujet: Re: Scrolling texte sinusoidal Jeu 24 Juin 2010 - 15:42 | |
| - onilink_ a écrit:
- ...tout est possible ^^
J'ai reussi a rendre la fonction 3 fois plus rapide en diminuant les calculs, voila ce que ça donne :
- Spoiler:
- Code:
-
//draw_text_sinus(x,y,string,freq,ceil,ang,move,xscale,yscale,color1,color2,alpha)
var xx,yy,str,freq,cei,ang,move,xs,ys,co1,co2,al,lt; var i,tt,ango;
xx = argument0 yy = argument1 str = argument2 freq = argument3 cei = argument4 ang = argument5 move = argument6 xs = argument7 ys = argument8 c1 = argument9 c2 = argument10 al = argument11
lt=string_length(str)
if( !variable_local_exists('d_create_3141592') ) { d_create_3141592 = 1 strl_3141592[0] = 0 for(i=0 ; i<lt ; i+=1) { strc_3141592[i] = string_copy(str,i+1,1) strl_3141592[i+1] = strl_3141592[i] + string_width(strc_3141592[i]) } }
tt = 2*3.1415*freq/lt ango = 3.1415*ang/180
for (i=0; i<lt; i+=1;) { ly = -sin( ango + i*tt ) * cei draw_text_ext_transformed_color(xx + strl_3141592[i]*xs , yy + ly*ys, strc_3141592[i] , -1, -1, xs, ys, ly*move, c1, c1, c2, c2, al) }
en fait, comment t'as réussi a trouver les bons calculs pour le script ? je ne sais pas mais je trouve ça plutôt impressionnant. et pis je n'ai jamais été bon en ce qui concerne l'analyse des scripts, lol |
| | | onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Scrolling texte sinusoidal Jeu 24 Juin 2010 - 16:02 | |
| Ben je sais plus trop ce que j'avais fait mais le but est de repeter le moins de fois possible les longs calculs ainsi que les fonctions qui prennent pas mal de temps.
Ici si je me souviens bien string_width prenais pas mal de temps donc j'ai tout mis dans un tableau afin de ne faire les calculs qu'une seule fois. Pareil pour la trigo, et d'ailleur je pense qu'il est encore possible d'optimiser ta fonction la vu qu'avant j'utilisais pas les lengthdir
Edit Encore une chose : utiliser le mot clé var pour detruire et reconstruire les variables prend pas mal de temps aussi, et j'avais aussi contourné ce probleme... |
| | | onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Scrolling texte sinusoidal Jeu 24 Juin 2010 - 16:24 | |
| J'ai regardé ce que je t'avais posté et j'ai presque été choqué x) Plus joli, et on gagne encore en fps - Code:
-
//draw_text_sinus(x,y,string,freq,ceil,ang,move,xscale,yscale,color1,color2,alpha) var i, tt;
if( !variable_local_exists('__DCreate') ) { __DCreate = 1 __Strl[0] = 0 __Len = string_length(argument2) for(i=0 ; i<__Len ; i+=1) { __Strc[i] = string_copy(argument2, i+1, 1) __Strl[i+1] = __Strl[i] + string_width(__Strc[i]) } } tt = 360*argument3/__Len
for (i=0; i<__Len; i+=1;) { ly = lengthdir_y( argument4, argument5 + i*tt ) draw_text_ext_transformed_color(argument0 + __Strl[i]*argument7 , argument1 + ly*argument8, __Strc[i] , -1, -1, argument7, argument8, ly*argument6, argument9, argument9, argument10, argument10, argument11) }
|
| | | Wargamer *Excellent utilisateur*
Messages : 6938 Projet Actuel : Bataille de cake au fruits
| Sujet: Re: Scrolling texte sinusoidal Jeu 24 Juin 2010 - 21:35 | |
| c'est quoi string widht? je connais le length qui renvoi le nombre de caratères |
| | | red-error Utilisateur confirmé: Rang ****
Messages : 1015 Projet Actuel :
| Sujet: Re: Scrolling texte sinusoidal Jeu 24 Juin 2010 - 21:45 | |
| Ca doit renvoyer la largeur du texte avec la police actuelle si tu le drawais, comme string_height doit donner la hauteur...
Sinon je crois que j'arrive presque à comprendre. C'est le lengthdir qui est sensé être plus rapide donc ? |
| | | Contenu sponsorisé
| Sujet: Re: Scrolling texte sinusoidal | |
| |
| | | | Scrolling texte sinusoidal | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |