Rozměry objektů ve Flashi
28. November 2007
V dnešním článku bych chtěl upozornit na pár špeků, které se týkají práce s objekty ve Flashi – přesněji s nastavováním jejich rozměrů.
Když jsme se rozhodli v Gopasu přejít při vytváření e-learningu z platformy Macromedia Director na Adobe Flash tak trochu jsme tušili, že to nebude uplně jednoduchá cesta. Museli jsme řešit spousty špeků, které často nemají řešení, ke kterému se dá dospět nějakou rozumnou úvahou. Kromě práce s textfieldy je lahůdkou práce s objekty.
V našich e-learningových lekcích často používáme shapy – přesněji řečeno objekty vytvoření pomocí Rectangle tool. Pomocí JSFL si vytvoříme knihovní prvek s danými vlastnostmi (barva výplně, barva a šířka okraje) a ten pak umísťujeme do stage – měníme pouze umístění a rozměry instance.
Předevčírem jsem v našem interním buglistu našel od vývojářů tuto poznámku – Shapy jsou umístěny o několik pixelů mimo, jsou menší. Po ověření jejich tvrzení jsem začal hledat chybu ve svém kódu…ale bez výsledku. Vyzkoušel jsem několik způsobů pro vytváření instancí shapů ve stagi, ale výsledek byl stále stejný – špatné rozměry. Shapy se zobrazovaly menší – a to i o několik desítek pixelů. Google taky nepomohl, ale pak jsem po několika hodinách laborování našel řešení – shapy je nutné udělat hodně velké. Šířka i výška knihovního prvku musí být větší než šířka i výška instance na stagi. Pak jsou rozměry v pořádku. Flash umí správně rozměry pouze zmenšovat.
Na obrázku vidíte instance tří různých knihovních prvků, kterým je pomocí ActionScript nastavena stejná velikost – výška 90 pixelů, šířka 800 pixelů. Skutečnost je ovšem jiná – správné rozměry má pouze třetí objekt. Zdrojový soubor – freaky-flash-shape.fla (FLA, 25 KB).
Závěr
Samostatná kapitola je práce s JSFL – tam se Flash vykazuje odlišné chování ve Windows XP a ve Vistách. Zajímavým oříškem je též detekce zmáčknutých kláves – lze přidat posluchače pro detekci stračených kláves. Problém nastane při kombinaci Windows Vista + Internet Explorer 7 – kombinace kláves CTRL+A(C, V, X, Z…) do Flashe neprojde – resp. nedojde k události onKeyDown. Naštěstí i tohle jde různými workaroundy řešit – ale o tom někdy příště.
Flash je úžasná hračka, ale dokáže taky pěkně potrápit – nebýt nápadu se zvětšením rozměrům knihovních prvků lámu si s tím hlavu ještě teď.
Článek patří do kategorie: Flash
3 Komentářů Přidat komentář
1. DGX | 29. November 2007 v 0.46
Problém je v tom, že _width a _height se počítá v pixelech jako celé číslo, tedy jde o zaokrouhlené rozměry. A špatný rozměr je pak důsledek zaohrouhlovací chyby.
Ty máš třeba objekt o šířce 5,6px, _width ale uvádí šířku 6px. Nastavíš _width na 800px, což se interně přepočítá na _xscale = 800 / 6 = 133,33. Jenže zobrazí se objekt o velikosti _xscale * 5,6 = 133,33 * 5,6 = 747px. Takže je o 53px menší.
Lze to eliminovat buď vytvářením větších objektů, jak píšeš, nebo vytvářet objekty s rozměry v celých číslech. Třeba pomocí mřížky.
2. Mirek | 29. November 2007 v 21.13
Mně se osvědčil přístup, kdy si vytvářím knihovny symbolů, jejichž největší rozměr, nebo oba jsou rovné právě 100px. Ona pak i procentuální změna měřítka vlastně udává skutečný rozměr v px.
3. tomáš | 5. February 2010 v 12.10
dobrý den potřeboval bych někoho kdo umí pracovat s flash web stránkami.Moc žádám toho, který to umí aby mi napsal na EMAIl ..Děkuji moc..Email: celko.tomas (at) seznam.cz
Přidat komentář
Povolené HTML značky:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>
Odkazovat na tento článek | Přihlásit se k odběru těchto komentářů přes RSS Feed