Ich arbeite an meinem ersten Flash-Projekt, und für meinen Preloader möchte ich einen wirklich einfachen Farbverlauf basierend auf dem Prozentsatz geladen machen. Der Preloader sagt "77% geladen ...", wobei die Zahl 77 eine dynamische Textinstanz ist, die percentLoaded heißt. Ich möchte, dass sich die textColor von percentLoaded auf einem Farbverlauf von # 000000 zu #FFFFFF in Graustufen ändert.RGB-Farbverlauf basierend auf Prozentsatz der geladenen Datei
Daher kann ich nicht einfach tun:
percentLoaded.textColor=(currentValue/100)*0xFFFFFF;
Dieser wandelt nur die Textfarbe auf ein Vielfaches von FFFFFF, sondern gibt eine Farbe, da es nicht drei separate Komponenten ist. Derzeit ist hier, was ich habe:
percentLoaded.text=currentValue.toString();
percentLoaded.textColor=rgb2hex((currentValue/100)*255, (currentValue/100)*255, (currentValue/100)*255);
Wo „rgb2hex“ ist eine Funktion innerhalb der Klasse als solche definiert:
public function rgb2hex(r:Number, g:Number, b:Number) {
return '0x'+(r << 16 | g << 8 | b).toString(16).toUpperCase();
}
Es sieht nicht so wirklich verändert die Farbe des die Schriftart aber. Ich habe flash.text.TextField und flash.display.MovieClip importiert, bin mir aber nicht sicher, ob ich etwas anderes vermisse. Wäre das mit String-Verkettung einfacher? Oder gibt es vielleicht etwas mit currentValue/100 und übergibt das als Nummer?
Wenn neugierig, fand ich den Code für rgb2hex here.
Danke!
Dies funktioniert nicht. Versuchen Sie, currentValue auf 1 zu setzen. Sie erhalten 0x28f5c. Sie müssen ((currentValue/100) * 0xFF) in ein int umwandeln, bevor Sie mit 0x010101 multiplizieren. – Ponkadoodle
Stimmt, ich habe das vergessen, behoben; Danke, dass du das bemerkt hast! Die Besetzung muss tatsächlich auf das Divisionsergebnis gehen, weil es deshalb passiert - die Klasse "Number" von Flash ist ein IEE-Float. Casting zu Uint sollte es lösen. – LiraNuna
Nein, der aktuelle Wert liegt zwischen 0-100. Wenn Sie nach dem Teilen casten, aber vor dem Multiplizieren mit 0xFF, erhalten Sie eine 0 oder eine 1. Er will volle Graustufen, nicht nur Schwarz/Weiß. Und das Problem ergibt sich nicht aus Gleitkomma-Ungenauigkeiten. Das liegt daran, dass Ihr Format (* 0x010101) im Wesentlichen aus drei Feldern besteht (01, 01, 01). Es erwartet nicht, dass etwas in einem Feld von einem anderen Feld beeinflusst wird. Wenn Sie jedoch einen Wert größer als 255 verwenden, kann ein niedriges Feld ein hohes Feld beeinflussen und ein Wert zwischen ganzzahligen Werten ermöglicht, dass ein hohes Feld einen niedrigeren beeinflusst. Versuchen Sie 1.5 * 0x010101, um zu sehen, was ich meine. – Ponkadoodle