Autor Beitrag
.50AE
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 100



BeitragVerfasst: So 05.11.06 19:16 
Hallo.

Bei WarCraft3 handelt es sich um ein relativ komplexes Strategiespiel. Es ist auch ein Editor mitgeliefert, in dem ein Scripteditor integriert ist.
Mit dessen Hilfe kann man im Spiel Texte ausgeben; diese kann man auch farbig ausgeben lassen in dem man |cff und dann einen HTML wert ohne # vor den text schreibt.

Also in etwa so: |cffff0000Hallo!|r (|r begrenzt den gefärbten Text)

Nun. Ich habe einen Colorpicker für W3 geschrieben. Dieser soll ein Feature haben dass den Text in einem Farbverlauf ausgibt. Also z.B. von rot nach Blau.

Ich bin auch schon fertig.. wäre da nicht irgendwo ein Fehler.
Im Spiel sieht das ergebnis so aus, dass erster und letzter Buchstabe richtig gefärbt sind (das hab ich schonmal sichergestellt wie sich im Code zeigen wird..), die Buchstaben dazwischen allerdings haben auf einmal einen Grün anteil obwohl sowohl start als auch end-farbe kein gelb beinhalten..

Abgesehen davon ist der Farbverlauf ganz schön -.-

Hier nun der Code, ich hoffe jemand findet den Fehler und kann mir helfen!

MfG 50ae

ausblenden volle Höhe Delphi-Quelltext
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:
//VARIABELN
var f1,f2:Tcolor;
colors: Array of Tcolor;
startstr,endstr,temp:string;
letters,r1,r2,g1,g2,b1,b2,i,rtemp,gtemp,btemp,rstep,gstep,bstep:integer;
//

colors[0] := f1; //COLORS soll die zwischenfarbtöne beinhalten
temp := colortohtmlcolor(colors[0]); //temp ist das gleiche wie COLORS[i], nur ohne das # (was in w3 nicht benötigt wird)
delete(temp,1,1);
ecoloredtext.Text := ecoloredtext.Text + '|cff' + temp + startstr[1] +'|r '//Erster Buchstabe (soweit gehts noch)
rstep := round((r2-r1)/letters-1); //rstep ist die Größe der zwischenschritte.. also z.B. start=200 end=100 dann ist r bei 4 buchstaben 25
gstep := round((g2-g1)/letters-1);
bstep := round((b2-b1)/letters-1);
if letters = 1 then begin //Wenn der Text nur 1 buchstabe lang ist...
temp := colortohtmlcolor(colors[0]);
delete(temp,1,1);
ecoloredtext.Text := '|cff' + temp + startstr[1] +'|r ';
end else begin //Bei mehr Buchstaben..
For i:=1 to letters-2 do //-2 deshalb, weil ich den letzten buchstaben wieder per hand hinzufüge. (sonst würde die endfarbe fehlen weil irgendwie 1 schritt zu viel berechnet wird)
 begin
 rtemp := r1+(rstep*i); //rtemp ist der rotanteil der zwischenfarbe
 if rtemp > 255 then rtemp := 255;
 if r1=0 then rtemp := 0
 gtemp := g1+(gstep*i); //das hat auch nichts geholfen den grünanteil wegzukriegen wenn nur rot und blau vorhanden sein sollten
 if gtemp > 255 then gtemp := 255;
 if g1=0 then gtemp := 0;
 btemp := b1+(bstep*i);
 if btemp > 255 then btemp := 255;
 if b1=0 then btemp := 0;
 colors[i] := RGB(rtemp,gtemp,btemp);
 temp := colortohtmlcolor(colors[i]);
 delete(temp,1,1);
 ecoloredtext.Text := ecoloredtext.Text + '|cff' + temp + startstr[i+1] +'|r '//Hier wird die zwischenfarbe an den bisherigen "gefärbten" text angehängt
 c1.color:=f1; //c1-5 sind panels um mir die farben gleich anzeigen zu lassen (teilweise zumindest)
 c5.color:=f2;
 c2.color:=colors[1];
 c3.color:=colors[2];
 c4.color:=colors[3];
 end;
temp := colortohtmlcolor(f2);
delete(temp,1,1);
ecoloredtext.Text := ecoloredtext.Text + '|cff' + temp + startstr[letters] +'|r '//endfarbe wird angehängt
end;
except end;



Moderiert von user profile iconChristian S.: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am So 05.11.2006 um 18:22