onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Afficher du texte coloré Sam 5 Déc 2009 - 20:14 | |
| Maj du script: drawTextColored - Code:
-
var str, line, wid, s, e, part, col, draw, prevCol; str = argument2 line = 0 wid = 0 s = 0 e = 0 // start - end balise draw = true prevCol = draw_get_color()
while(draw) { s = string_pos("<", str) e = string_pos(">", str) if(s == 1) { col = string_copy(str, s+1, e-s-1) if(col == "") col = "c_black" if(string_copy(col, 1, 2) == "c_" || string_copy(col, 1, 1) == '$') execute_string("draw_set_color(" + col + ")") else execute_string("draw_set_color(make_color("+col+"))") str = string_delete(str, 1, e) continue } if(string_copy(str, 1, 1) == '#') { line += 1 wid = 0 str = string_delete(str, 1, 1) continue } e = string_pos('#', str) if(e < s && e>0) s = e if(s == 0) { s = string_length(str)+1 draw = false } part = string_copy(str, 1, s-1) draw_text(argument0 + wid, argument1 + line*16, part) wid += string_width(part) str = string_delete(str, 1, s-1) } draw_set_color(prevCol) Code d'exemple (draw): - Code:
-
str = "Voici un <$53FF12>texte<> aux <255,0,0>couleurs<> multiples :p" +"#<c_blue>Et en <c_aqua>plus<> il tient sur <20,100,50>plusieurs lignes hohoho" drawTextColored(16, 16, str) Edit: pour ceux sous GMS utiliser cette versions la: - Spoiler:
Voici un système sympa qui permet d'afficher un texte avec de multiples couleurs tout simplement en insérant des balises. Par exemple pour écrire : Vive la TRIFORCEil suffiras de mettre en 3 eme argument "Vive la <FF0000>TRIFORCE<\n>" Il est maintenant possible d'écirire la couleur en mode rgb "Vive la <255,0,0>TRIFORCE<\n>" Ou même d'écrire "Vive la <c_blue>TRIFORCE<\n>" Par contre ne prend pas encore en compte la notation hexa-rgb du genre "Vive la <$FF,0,0>TRIFORCE<\n>" !!! Warning lol Voila le fonctionnement est trés simple ! texte [...] <couleur> texte [...] <\> [...] -La première balise indique la couleur en hexadécimal -La seconde balise arrête la coloration : <\> Les arguments entre [] sont facultatifs draw_text_colored(x,y,str,[vsep(>0)]) - Code:
-
var str,sep,i,c,ps,pe,sc,bs,ss,sx,sy,dx,tb,cl; str = argument2
sep = argument3 if(!sep) sep = 16
if(string_length(str)>32000) show_error('length error',1) for(i=0 ; i<string_length(str) ; i+=1) c[i] = 0
while(string_count('<\>',str)>0) { ps = string_pos('<',str) pe = string_pos('>',str) sc = string_copy(str,ps+1,pe-ps-1) str = string_delete(str,ps,pe-ps+1) bs = string_pos('<',str) for(i=ps ; i<bs ; i+=1) c[i-1] = balise_get(sc) str = string_delete(str,bs,3) }
sy = argument1 dx = 0 cl = 0 tb[0] = 0 for(i=0 ; i<string_length(str) ; i+=1) { ss = string_copy(str,i+1,1) sx = string_width(string_replace_all(string_copy(str,0,i),'#','')) if(ss == '#') { cl += 1 sy += sep tb[cl] = sx dx += sx-tb[cl-1] if(cl-1==0) dx-=1 } draw_set_color(c[i]) draw_text(sx-dx+argument0,sy,ss) }
Pour faire fonctionner draw_text_colored il faut aussi c'ette fonction : balise_get - Code:
-
var c, i, s, v, str; c = 0; str = argument0
if(string_copy(str,1,2)=='c_') { switch(str) { case "c_aqua" : return $FFFF00; case "c_black" : return $000000; case "c_blue" : return $FF0000; case "c_dkgray" : return $404040; case "c_fuchsia" : return $FF00FF; case "c_gray" : return $808080; case "c_green" : return $008000; case "c_lime" : return $00FF00; case "c_ltgray" : return $C0C0C0; case "c_maroon" : return $000080; case "c_navy" : return $800000; case "c_olive" : return $008080; case "c_purple" : return $800080; case "c_red" : return $FF0000; case "c_silver" : return $C0C0C0; case "c_teal" : return $808000; case "c_white" : return $FFFFFF; case "c_yellow" : return $00FFFF; default : return 0; } }
if(string_count(',' , str)) { if(string_count(',' , str)!=2) show_error('Error rgb',0) s = string_copy(str,1,string_pos(',' , str)-1) c += real(s) str = string_delete(str,1,string_pos(',' , str)) s = string_copy(str,1,string_pos(',' , str)-1) c += real(s)<<8 str = string_delete(str,1,string_pos(',' , str)) c += real(s)<<16 return c }
for(i=0 ; i<6 ; i+=1) { s = string_copy(str,i+1,1) v = ord(s) if(v>=48 && v<=57) c += (v-48)*power(16,5-i) if(v>=65 && v<=70) c += (v-65+10)*power(16,5-i) } return c
Exemple d'utilisation : DRAW - Code:
-
draw_text_colored(16,16,"Exemple <009000>de texte<\> <F54861>Colore<\> !" +"#<c_blue>Et<\> vive la <255,0,0>TRIFORCE !!<\> <c_green>XD<\>")
Voila en esperant que ce seras utile ^^ sinon @++
Dernière édition par onilink_ le Sam 12 Déc 2015 - 23:12, édité 10 fois |
|
Playboy Utilisateur confirmé: Rang ***
Messages : 699 Localisation : Sur la lune Projet Actuel : Sur le pont du Charles de Playboy
| Sujet: Re: Afficher du texte coloré Dim 6 Déc 2009 - 0:16 | |
| Hum voyant le titre je suis venue me pencher sur ce script Vu que j'en ai fait un qui fait la même chose (disponible en téléchargeant mon rajout de fonction sur mon sujet) je viens apporter mes lumières Je trouve peu judicieux l'utilisation de la première boucle .... - Code:
-
for(i=0 ; i<string_length(str) ; i+=1) c[i] = 0
Surtout que cette boucle n'est pas protégée .... Il faut savoir que GM ne permet que 32000 valeurs dans un array manuel (c'est à dire sans ds_create_list() (dont je ne sais pas si elle a les même contraintes :S) Donc 1 cela plantera et de 2 au final tu empêches un texte de plus de 32000 caractères. Après pour le reste mon code est blindé pour pallier aux erreurs mais en enlevant les vérifications j'arrive à la même logique (temps d'exécution identique quoi) donc chapeau J'ai mis aussi un peu plus d'arguments donc je peux te les suggérer : le alpha et les alignements. A voui j'ai aussi permis de faire différents formats de couleur ^^" (RGB ou couleur GM) mais c'est du chipottage là ^^". Pour info voila ma fonction : - Code:
-
draw_string_color(x,y,halign,valign,alpha,"<r,g,b>str1<c_color>str2...") Bonne chance si tu te penches dessus pour l'améliorer |
|
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Afficher du texte coloré Dim 6 Déc 2009 - 8:23 | |
| Ok merci pour ces infos ^^
Par contre y a quelqu'un qui utilise des textes a + de 32000 caractères ?? Ici c'est juste pour simplifier la coloration, en plus dans l'autre script on peu définir d'autres systèmes de lectures des balises donc.... |
|
bibi675 Utilisateur confirmé: Rang *****
Messages : 2456 Localisation : Oise Projet Actuel : Jeu par navigateur original
| Sujet: Re: Afficher du texte coloré Dim 6 Déc 2009 - 12:28 | |
| Hum, à mon avis, un texte de 32000 caractères, colorisé ne rentrera pas dans une room standard (au max 1024 * 768) et si il est affiché dans une police plus petite, il ferra laggé le jeu comme pas possible. En tout cas, c'est magnifiquement codé (comme Playboy sûrement ) ! |
|
Topaze22 *Excellent utilisateur*
Messages : 6213 Localisation : Sur la Lune Projet Actuel : Projet HELLO/TOPAZE22 Mario Bros World
| Sujet: Re: Afficher du texte coloré Dim 6 Déc 2009 - 15:34 | |
| - onilink_ a écrit:
- Ok merci pour ces infos ^^
Par contre y a quelqu'un qui utilise des textes a + de 32000 caractères ?? Ici c'est juste pour simplifier la coloration, en plus dans l'autre script on peu définir d'autres systèmes de lectures des balises donc.... Playboy oui |
|