Scripte:RGBa-Werte auslesen
Aus Clonk Wiki
Allgemein
Dieses Script kann aus einer Zahl die RGBa-Werte auslesen. In der Praxis ist die Verwendung von GetRGBaValue() (s. System.c4g) jedoch einfacher.
| RGBa-Werte auslesen | |
|---|---|
| Kategorie: | Snippet |
| Autor: | Feuermonster |
| Behandelt: | {{{Behandelt}}} |
| Empfohlenes Vorwissen: | {{{Vorwissen}}} |
| Benötigt Objektpacks: | {{{Packs}}} |
| Stufe: | |
Code
var
rgba
=
RGBa(144,244,184,151);
var
r
=
(rgba
&
16711680)>>16;
var
g
=
(rgba
&
65280)>>8;
var
b
=
(rgba
&
255);
var
a
=
(255
-
(~(rgba)>>24));
Erklärung
RGBa (Rot, Grün, Blau, alpha) definiert eine Farbe. Dabei kann der Rot-, Grün-, Blau- und Alphaanteil festgelegt werden. Jeder Teil fasst 1 Byte.
Ein Byte besteht aus 8 Bits. Bei RGB werden nur 24 Bits benötigt, bei RGBa sind es alle 32. Der alpha-Wert steht entgegen der Schreibweise an vorderster Stelle.
Der Wert RGB(255,255,255) sieht so aus:
00000000 11111111 11111111 11111111
00000000 11111111 00000000 00000000
Die Einsen stehen also dort, wo der Rotwert zu finden ist. Dies ist analog zu den anderen Zahlen.
Mit dem (rgba & 1611680) sorgen wir dafuer, dass am Schluss nur noch der Rotwert in der Zahl vorhanden ist. Momentan befindet er sich jedoch noch an einer ungünstigen Stelle. Wir verschieben den Rotwert mit >>16 nach Rechts. Wir streichen damit die 16bits davor. Damit erhalten wir den Rotwert. Das Prinzip ist beim Blau- und Grünwert gleich.
Clonk verwendet keine vorzeichenlosen Zahlen. D.h der Alphawert befindet sich an einer sehr unguenstigen Stelle.
11111111 00000000 00000000 00000000
ist negativ. Um den alpha-Wert zu erhalten, streichen wir einfach die ersten 24 Bits. Danach haben wir den alpha-Wert an der Stelle, an der wir ihn wollen. Leider ist die Zahl negativ, und so nicht gebrauchbar. Deshalb wenden wir den '~'-Operator an und subtrahieren dieses Ergebniss von 255. Damit erhalten wir den alpha-Wert so, wie wir ihn wollen.
Für genauere Details wegen dem alpha-Wert:
Clonk verwendet das Zweierkomplement. Ein paar Beispiele dazu, welche Binärwerte welchen Wert darstellen:
+127(10) = 01111111(2) = 7F(16) + 4(10) = 00000100(2) = 04(16) + 1(10) = 00000001(2) = 01(16) 0(10) = 00000000(2) = 00(16) − 1(10) = 11111111(2) = FF(16) − 4(10) = 11111100(2) = FC(16) −127(10) = 10000001(2) = 81(16) −128(10) = 10000000(2) = 80(16)
| Scripte des Scripte-Projekts | |
| Bonbon · Context-Eintrag · EliminateTeam · Flint:Partikelschleuder · Hüpfbonbon · TeamMessage | |
| Flint:HitCounter · Flint:Partikelkreis · Flint:Partikelschleuder2 · Is-Funktionen · Menü:Beim Start der Runde · Normaler Flint · Partikel-Linie in den Himmel · Rakete · Random · Relaunch · Return · Sichtweite · Spawn · Startposition | |
| Clantag · Gift-Effekt · Unverwundbarkeit · Scoreboard · Zufallsgespräch | |
| Lebensbalken · Nachrichten bei Sichtkontakt · Object2Overlay · SHA1 | |
| Dieser Artikel wurde gemäß der Scriptrichtlinien veröffentlicht. |
