Barvy, šetnáctová a desítková soustava
21.4.2008· Autor: Milan Macháček·
Počet komentářů: 1
V dnešním tip triku si ukážeme, jak jednoduše převedeme číslo desítkové soustavy do šestnáctkové (hexadecimální) soustavy a také jak toho využít při změně barvy MovieClipů.
Převod z desítkové soustavy do šestnáctkové
Desítkovou číselnou soustavu není třeba představovat, neboť jí všichni určitě znají - v desítkové soustavě jsou čísla složena z číslic 0-9. S šestnáctkovou soustavou je to trochu jiné, protože ke složení čísel se používají i písmena. Aby se nemusely používat speciální znaky, používá se prvních pět znaků abecedy tedy a, b, c, e, f. Respektive a = 10, b = 11, c = 12, d = 13, e = 14 a f = 15. Tím to způsobem se dá zkráceně zapsat třeba:
15 = f
255 = ff
1 000 000 = f4240
1 000 000 000 = 3b9aca00
Pro rozlišení, zda je číslo napsané v šestnáctkové soustavě, se používá předpona 0x nebo #. Ve Flashi se používá první příklad, tedy 0x. Nejčastěji se s ním setkáme při dynamické změně barvy MovieClipů s využitím třídy Color() která požaduje údaje právě v šestnáctkové číselné soustavě. Složení barev pak vypadá: 0xčervená, zelená, modrá a čísla udávají jas konkrétní barvy. Třeba 0xff0000 znamená, že červená barva bude svítit nejvíc a naopak, zelená z modré nebudou svít vůbec, výsledná barva tedy bude sytě červená:
var mojeBarva:Color = new Color(muj_mc)
mojeBarva.setRGB = (0xff0000)
V této ukázce jsme nejprve vytvořili proměnou mojeBarva třídy Color s parametrem měněného MovieClipu muj_mc. Na dalším řádku jsme její hodnotu nastavili na červenou a klip muj_mc se obarvil na červeno.
Ukázka použití
Vytvoříme si prázdný flashový dokument. Vytvoříme tři vrstvy, do prvního snímku přidáme tři vstupní textová pole a pojmenujeme Cdes_txt, Zdes_txt a Mdes_txt, do kterých se budou zapisovat číselné hodnoty jednotlivých barev. Do spodní vrstvy, umístíme komponentu Button a pojmenujeme jidale_btn (Button umístíme do spodní vrstvy).
Do prvního snímku pak vložíme akci:
stop();
var Cdes:Number;
var Mdes:Number;
var Zdes:Number;
dale_btn.onPress = function() {
Cdes = Number(Cdes_txt.text);
Mdes = Number(Mdes_txt.text);
Zdes = Number(Zdes_txt.text);
gotoAndStop(2);
};
dale_btn.label = "Spočítej"
Tato akce vytvoří 3 proměnné, doplní popsek komponentě Button, kterým se přesouváme po časové ose a přiřadí mu funkci. Tato funkce nám po stisku buttonu převede obsah vstupních polí na čísla, přiřadí je jednotlivým proměnným a přejde na druhý snímek.
Do druhého snímku časové osy umístíme 7 dynamických polí, které pojmenujeme: Cdes_txt, Zdes_txt, Mdes_txt, Chex_txt, Zhex_txt, Mhex_txt a barva_txt. Tyto pole nám budou ukazovat výsledky výpočtů. Na druhý snímek časové osy umístíme také jeden MovieClip, který bude obsahovat jen obdélník, nejlépe bílé barvy. Movie clip pojmenujeme barva_mc.
A nakonec do druhého snímku umístíme akci:
stop();
dale_btn.onPress = function() {
gotoAndStop(1);
};
dale_btn.label = "Znova";
Chex = Cdes.toString(16);
Mhex = Mdes.toString(16);
Zhex = Zdes.toString(16);
if (length(Chex)<2) {
Chex = "0"+Chex;
} else if (length(Chex)>=3) {
Chex = "ff";
Cdes = 255;
}
if (length(Zhex)<2) {
Zhex = "0"+Zhex;
} else if (length(Zhex)>=3) {
Zhex = "ff";
Zdes = 255
}
if (length(Mhex)<2) {
Mhex = "0"+Mhex;
} else if (length(Mhex)>=3) {
Mhex = "ff";
Mdes = 255
}
Cdes_txt.text = Cdes;
Zdes_txt.text = Zdes;
Mdes_txt.text = Mdes;
Chex_txt.text = Chex;
Zhex_txt.text = Zhex;
Mhex_txt.text = Mhex;
barva_txt.text = "#"+Chex+Zhex+Mhex;
barva = "0x"+Chex+Zhex+Mhex;
var novaBarva:Color = new Color(barva_mc);
novaBarva.setRGB(barva);
Která nejprve přidá akci Buttonu pro návrat na první snímek a změní jeho popisek.
Vytvoří tři proměnné Chex, Zhex a Mhex. Těmto proměnným přidá hodnotu Cdes (resp. Zdes a Mdes) která je v desítkové soustavě a převede jí do šestnáctkové:
<em> Chex = Cdes.toString(16);</em>
Dále se provede kontrola její hodnoty. Nejprve se zjistí, jestli je kratší než dvě, pokud ano, přičte se na začátek nula (barva se zadává vždy ve dvojici číslic), ale pokud je její délka větší než dvě, znamená to, že byla zadána hodnota vyšší, než 255 a přiřadí se do Chex hodnota FF a do Cdes 255. Totéž se provede s dalšími proměnnými.
Následně se vypíšou hodnoty proměnných do příslušných textový polí, vytvoří proměnnou barva a zřetězí do ní potřebnou hodnotu pro zápis barvy ("0x"+Chex+Zhex+Mhex)
Nakonec se vytvoří nová instance:
<em>var novaBarva:Color = new Color(barva_mc), </em>
která nastaví hodnotu barva našemu MovieClipu barva_mc:
<em>novaBarva.setRGB(barva);</em>
MovieClip pak změní barvu z bílé na příslušnou hodnotu námi zadané barvy.
Zdrojový kód ke stažení barvy.zip
Milan Macháček Milan Macháček - chemik se zájmem a Flash a fotbal. Zatím mám jediný projekt a tím je web Fotbalové Školy Most hráčů narozených roku 98.
E-mail: fsmost(zavinac)karneval.cz |
Web:
http://www.home.karneval.cz/fsmost
|
ICQ: 334352918 |
Motto: A přece se točí
Seriál:
Tipy a triky
Tipy a triky je seriál zaměřený na zajímavá řešení a vylepšení flashových aplikací