HanzBlog - archiv

Tato stránka vznikla kvůli zachování některých zajímavých článků, které byly publikovány na HanzBlog-u. HanzBlog byl zrušen kvůli zrušení freehostingu společnosti Xhosting.cz. Vlastníkem všech zde publikovaných textů je Jan Janoušek (Hanz), bez jehož svolení nesmí být tyto texty nikde publikovány.

Umírá Flash?

Dnes jsem měl po dlouhé době dost času a tak jsem se rozhodl přiučit něco nového o Flashi. Začal jsem hledat nové stránky, ale nic nového jsem nenašel.

Byly tam pořád jen ty staré. A já hlupák si myslel že na nich najdu něco nového. Ale dopadl jsem přesně naopak. K mému zděšení nikde nic. Tak například:

Diskusní fóra zejí prázdnotou (otázek je dost, ale odpovědi nikde).

Začíná mi to připomínat divoký západ. Chybí už jen ty chomáče trávy hnané větrem.

Kam se mohli všichni podít? To všichni kdo Flash umí se odmítají dělit s těmi co se ho chtějí naučit? Jediný nový tutoriál, o kterém vím je na Živě.cz

Je to snad skutečně konec Flashe pro české uživatele?

Komunikace na stránce

Možná jste již někdy potřebovali umístit na stránku dva Flashe, které by spolu komunikovaly. Dá se to řešit například pomocí třídy SharedObject a nebo scriptování na straně serveru, ale já vám ukáže jak to udělat jednodušeji.

Dělá se to pomocí třídy LocalConnection.

Script pro odeslání dat vypadá takto:

var odesilani:LocalConnection = new LocalConnection();
odesilani.send("nazev", "podnazev", hodnota);

Kde nazev je libovolná hodnota (bude fungovat jako balík). Podnazev je také libovolná hodnota a nakonec hodnota je proměnná, kterou budeme chtít odeslat.

Script pro příjem vypadá takto:

var prijimani:LocalConnection = new LocalConnection();
prijimani.connect("nezev");
prijimani.podnazev = function(hodnota) {
prijata_hodnota = hodnota;
};

A hodnotu, kterou jsme odeslali máme rázem v druhém flashi uvedenou jako prijata_hodnota.

Nakonec si můžete stáhnout příklad.

Začínám

Vítejte!

Dnešním dnem spouštím tento blog. A doufám že se vám bude líbit a zaujme vás.

Celé to "jede" na blogovacím systému LifeType.

Očekávám sice, že budou ještě menší výpadky kvůli některým úpravám, ale nic většího by to být nemělo.

Tento blog jsem zřídil, abych se s vámi mohl podělit o mé znalosti, ale také o nové informace, které se k vám ještě možná nedostaly.

Flash Player 8.0.r24.

Dnes byl vydán update Flash Playeru, který byl označen jako kritický!

Opravuje jak standalone player (přehrávač ve Flashi), tak přehrávač v prohlížečích.

Doporučuji ho okamžitě stáhnout a nainstalovat.

Pokuď jste běžný uživatel, nebo nemáte Flash 8, tak si jen stáhněte novou verzi Flash Playeru z download cetra.

Flash Player 8.5 - veřejná betaverze

Dnes byla vydána veřejná betaverze Flash Playeru 8.5. Byla sice dostupná již dříve, ale jen pokuď jste si stáhli betaverzi Flex 2.0.

Pokuď jste běžný uživatel, pak nemá cenu jí stahovat. Novinky, které v ní jsou se zatím vztahují jen na Flex 2.0 a né na Flash 8 (například ActionScript 3.0, regulární výrazy, či nativní podporu ECMAScriptu).

Adobe jí vydává, abychom zkontrolovali, zda v ní fungují všechny animace dosud vytvořené. Pokuď zjistíte, že nějaká animace, která ve starší verzi Flash Playeru fungovala a ve verzi 8.5 ne, tak to prosím oznamte.

Uložte data do počítače

Možná, že jste už slyšeli fámy o tom, že Flash neumí zapisovat data na počítač, kde je spuštěn. Můžu vás ujistit, že to není v žádném případě pravda! Možná znáte třídu SharedObject, která také umožňuje ukládat data do počítačem ale já bych chtěl mluvit o něčem jiném.

Ten „zázrak“ je funkce MMSave, která existuje od Flashe MX, ale moc se o ní neví.

Ukládat můžete buď text, a nebo *.swf

 

Zápis pro uložení textu je zcela jednoduchý:

 

promenna = "Tak tady bude text co se uloží!";
MMSave(promenna, "muj_soubor.txt");

 

Deklarace je zcela jednoduchá. Nejdřív uvedete název proměnné co chcete uložit a poté název souboru. U názvu souboru, bych se chtěl pozastavit. Nemusíte soubor ukládat jen jako TXT, ale třeba také HTML, XML a vlastně s jakoukoli koncovkou. Data se, ale vždy uloží v takovém formátu jako jste zadali obsah proměnné. Díky libovolné koncovce můžete vytvořit ve Flashi jednoduchý, HTML či XML editor!

 

Další možností je uložit *.swf :

 

MMSave(cesta_k_mc, "nazev_souboru.swf");

 

Kde cesta_k_mc je cesta k MovieClipu, do kterého načtete nějaký externí *.swf, který se poté uloží pod názvem nazev_souboru.swf do vašeho počítače.

 

Text a *.swf můžete poté načítat známými způsoby (text třeba přes LoadVars a *.swf třeba přez loadMovie).

 

A nakonec bych ještě měl uvést kam se to ukládá. Při tomto zápisu se ve Flashi MX 2004 ukládá do:

C:/Program Files/MacromediaFlash MX 2004/en/Configuration/NÁZEV_SOUBORU

Tato adresa se mění samozřejmě v závislosti na adresáři kam máte nainstalován Flash a na verzi Flashe (napište prosím potom někdo s Flashem MX kam se ukládá vám).

 

Pokud byste chtěli ukládat do kořenového adresáře disku tak použijte adresu:

../../../../../NÁZEV_SOUBORU

Flash player uninstaller 8

Odhaduji, že většina z vás ještě Flash Player 8 ani nenainstalovala, ale pokuď tak někdo už učinil a potřeboval by se ho teď zbavit tak Macromedia vydala právě dnes utilitu pro jeho odinstalaci. Naleznete ji na těchto stránkách.

Macromedia Flash 8

Už je to tady! Flash ve verzi 8 je zde! Společně s ním vyšel ještě Dreamweaver 8 a Fireworks 8. Všechny tyto produkty společně s Contribute 3 a FlashPaper 2 vyšly v balíku Macromedia Studio 8.

Mezi hlavní novinky patří Alpha u videa, filtry, nové komponenty a mnoho dalšího. Bližší informace naleznete přímo na stránkách výrobce. Zvláště bych chtěl upozornit na prezentaci, kterou tam naleznete. Jsou v ní názorně ukázány nové funkce.

Hned jak se dovím nové informace, nebo se snad k němu dostanu, tak vás budu informovat blíže.

PS: Nezapomeňte instalovat nový FlashPlayer 8 !

Vlastní kontextové menu

Další z málo známých věcí ve Flashi, která přibyla ve verzi MX 2004 je možnost vytvářet vlastní kontextovou nabídku. Ta se může hodiny například u bannerů, kde umožníte uživatelům otevřít si stránku v novém okně.

Celé menu se bude zkládat z konstruktoru, schování staré nabídky, přidání položek, vytvoření funkcí k jednotlivým položkám a nakonec určení k čemu se má menu vztahovat. U tohoto bych se chtěl také pozastavit. Nemusíte totiž nastavovat celému flashi jedno menu, ale třeba každému tlačítka či MovieClipu jiné.

Script bude vypadat takto:

// Konstruktor pro menu
var konstruktor = new ContextMenu();
// Schová starou nabídku
konstruktor.hideBuiltInItems();
// Vytvoření položky menu
var polozka = new ContextMenuItem("Otevři odkaz v novém okně ", proved);
// Přidání položky do menu
konstruktor.customItems.push(polozka);
// Funkce, která se provede po vybrání položky
function proved() {
getURL("http://janousek.honza.sweb.cz", _blank);
}
// Přiřazení menu menu = konstruktor;

A to je vše. Po kliknutí pravým tlačítkem myši kdekoli v *.swf budete mít v kontextové nabídce položku Otevři odkaz v novém okně. Když na něj kliknete tak se vám v novém okně otevřou mé stránky.

Pokud byste chtěli udělat kontextové menu jen pro určitý MovieClip, tak přiřaďte menu tomu MC třeba takto:

 _root.nezev_mc.menu=konstruktor;
Příklad si můžete stáhnout.

Flash Lite 2 - Optimalizace výkonu

Narazil jsem na zajímavý článek o optimalizaci Flash Lite 2 animací. Všechny informace, které v něm najdete mají jedno společné a to, že se CPU mobilních telefonů nemůže ani v nejmenším rovnat CPU počítače a proto bychom měli volit vždy variantu, která obnáší menší množství výpočtů a operací.

Stručný obsah článku:

Pro velké a hlavně jednoduché obrázky (složené z rovných větších ploch) by se měla používat vektorová grafika.

Pro malé obrázky se spoustou záhybů a křivek by se měla použít bitmapa.

Vektorová grafika - mnoho výpočtů, ale malá velikost

Rastrová grafika - náročnost na paměť

Nikdy neimportujte velké obrázky a potom je zmenšujte!

Nastavte vaší animaci co nejnižší kvalitu (na většinu animací stačí kvalita nastavená na LOW).

Snažte se vyvarovat oblým vektorům (kruhy, ovály), protože jsou velmi náročné na CPU.

Nenastavujte zbytečně objektům průhlednost (zase strašný záběr na CPU).

Snažte se kombinovat animaci pomocí tweenů s animací po jednotlivých snímcích (vždy záleží na okolnostech, která metoda je méně náročná).

CSS ve Flashi

Jednou z vymoženosti Flashe MX 2004 a novějších , je formátování textu pomocí kaskádovacích stylů (CSS). Styly můžete používat, buď interní, nebo externí. Bohužel nemůžete používat CSS v plné jeho kráse. Funguje jen pár základních vlastností.

Pokuď si vytvoříme textové pole, u kterého povolíme formátování pomocí HTML, tak zápis pro užití interního CSS může vypadat například takto:

var styl = new TextField.StyleSheet( );
styl.parseCSS("p{ font-size:12px;} .nadpis{text-align:center; color:#009900; font-weight:bold; font-size:23;} .obsah{font-family:Verdana;}");
textove_pole.styleSheet = styl;
textove_pole.htmlText = '<p class="nadpis">NADPIS</p><br /><p class="obsah">Váš <b>text</b>, který si třeba vymyslíte.</p>';

Nejdříve vytvoříte konstruktor třídy StyleSheet( ). Pro čtení CSS stylu Flashem se použije funkce parseCSS( ). Do ní zadáváte CSS vlastnosti. Na dalším řádku přiřadíme textovému poli právě ty naše styly. A na posledním řádku je již Samotný text.

U CSS musíte dávat pozor na zápis, protože Flash chyby nepřečte. Při stylování nemůžete použít <div>, <span>. A zápisy typu i{}, b{}, u{}, atd. fungovat také nebudou. Fungeje jedině zápis p{} a pomocí class.

U externího styly zůstává vše skoro stejné. Skript by vypadal takto:

var styl = new TextField.StyleSheet();
styl.load("cesta_k_souboru.css");
styl.onLoad = function() {
pole.styleSheet = styl;
pole.htmlText = '<p class="nadpis">NADPIS</p><br /><p class="obsah">Váš <b>text</b>, který si třeba vymyslíte.</p>';
};

Zásady jsou stejné jako u interního stylu. Jen bych chtěl upozornit, že styl musí být přidělen textovému poli dříve, než text, nebo nebude formátován!

Poslední možnost, na ktero bych chtěl upozornit je tento způsob formátování:

var styl = new TextField.StyleSheet();
styl.parseCSS(" cervene{ color:#FF0000; } ");
textove_pole.styleSheet = styl;
textove_pole.htmlText = '<cervene>Červený nápis</cervene>';

V tomto scriptu nejde ani tak o zápis ActionScriptem, ale CSS.

Na úplný konec tady mám ještě výpis všech vlastností, které lze v CSS použít:

Podpora Flashe v prohlížečích

Velmi často se objevuje v různých diskusích, že používat Flash není dobré, kvůli podpoře FlashPlayeru prohlížečů. Je na tom Flash opravdu špatně?

Odpověď zní ne! Podle průzkumů firmy Macromedia to vypadá s celosvětovou podporou FlashPlayeru vzhledem k jiným platformám v prohlížečích takto:

Podpora Flashe vzhledem k jiným platformám

Do tohoto čísla jsou započítány všechny verze FlashPlayeru. Ale nejvíce vás bude asi zajímat podpora jednotlivých verzí a to u nás. Poslední mi známé správné měření provedl Yuhů. Podle jeho měření je FlashPlayer 7 podporován na 86,5% prohlížečů a verze 6 na 10,1% prohlížečů . Pro bližší informace se podívejte přímo na jeho blogu. Ještě bych upozornil, že toto měření bylo provedeno v březnu 2005, takže počítejte s tím, že se podpora FlashPlayeru 7 již zvýšila.


A nakonec ještě jedno měření od firmy Macromedia naleznete zde. Je v něm procentuální podpora různých verzí FlashPlayeru. Tam je již FlashPlayer 7 podporován na 90% počítačů.

Update blogu

Provedl jsem update tohoto blogu na novější verzi, ale mám takový dojem, že jsem udělal někde chybu, takže, když zjistíte, že něco nefunguje tak mi to napište do komentářů k tomuto článku.

PDF či SWF ?

Co myslíte? Který z těchto dvou formátů má větší budoucnost pro uchovávání textových informací?

Možná vás napadne co má společného formát SWF s uchováváním textových informací? Pokuď nevíte tak asi neznáte ani Macromedia FlashPaper 2, který umí vytvářet dokumenty funkčně velmi podobné PDF, ale ve formátu SWF. Hlavní výhody a nevýhody tohoto formátu jsou oproti PDF:

Pokuď víte ještě o nějakých pro a proti tak je napište do komentářů a hlavně napište co si myslíte, že je lepší SWF, nebo PDF?

SharedObject

Třída SharedObject se hodí pokuď potřebujete uložit data z Flashe do počítače uživatele. Jsou to vlastně takové cookies, ale od Flashe.

Takto uložená data se ukládají do souborů s koncovkou *.sol a naleznete je ve složce Data Aplikací -> Macromedia -> Flash Player. Někdy mohou být i v podadresářích s názvem odpovídajícím URL stránek z kterých jsou.
Ale dost teorie. V praxi to vypadá nějak takto:

var objekt = SharedObject.getLocal("soubor", "/");
objekt.data.jmeno = "Honza";
objekt.flush(); // Ukládá data

Tímto uložíte do souboru soubor.sol proměnnou jmeno s hodnotou Honza. A pokuď jí budete chtít potom načíst tak takto:

var objekt =SharedObject.getLocal("soubor", "/");
nactena_promenna =objekt.data.jmeno;

Do proměnné nactena_promenna se načte hodnota Honza.
Pro třídu SharedObject existuje ještě jiné metody, nebo události:

objekt.clear(); // Vymaže obsah souboru s daty

objekt.getSize(); // Vrátí velikost všech dat v bajtech

objekt.onStatus // Odstartuje se, při načtení nebo uložení dat

A na závěr ještě trocha teorie. Pokuď jsou data moc velká, tak se uživateli objeví dialogové okno, které můžete vidět, když si dáte v nějaké animaci settings a zeptá se ho zda data uložit chce. Takže pokuď nemáte nikdy jistotu zda se data uloží nebo ne, ale ve většině případů je vše bez problémů.

Bezpečnost a Flash

Možná jste již někdy narazili na problém, kdy jste potřebovali načíst buď SWF, textový soubor, nebo XML z jiné domény, nebo subdomény. Tvůrci Flashe totiž dbají na bezpečnost a těmto přenosům zabránili (Flashové stránky jdou totiž hacknout stejně jako jakékoli jiné).

Kdyby nás ovšem možnost načítat data z jiných domén neumožnili vůbec, tak by to byla velká škoda. Naštěstí ve Flashi MX 2004 existují již funkce, díky kterým je to možné (jedena z funkcí funguje již ve Flashi MX). Jsou to tyto funkce:

System.security.allowDomain();
Tato funkce vám umožní načítat SWF soubory z domén, které zadáte. Pro načítaní dat z domény i subdomény vypadá zápis takto:

// Jen pro Flash Player 6
System.security.allowDomain("example.cz");
// Pro Flash Player 7
System.security.allowDomain("www.domena.cz", "subdomena.domena.cz");
Jak vidíte tak zápisy se pro každou verzi Flash Playeru liší. Doporučuji ten druhý zápis (pokuď by se ten SWF spustil v Flash Playeru 7 tak by to nefungovalo).

System.security.allowInsecureDomain();
Tato funkce je stejná jako předchozí až s tím rozdílem, že se s ní připojuje na zabezpečené stránky (https). Funguje až od Flashie MX 2004. Ve Flashi MX se můžete na zabezpečené stránky připojovat pomocí funkce System.security.allowDomain(), ale zase platí, že když to spustíte ve Flash Playeru 7 tak to nebude fungovat.

System.security.loadPolicyFile();
A nakonec je tu má nejoblíbenější funkce, která umožňuje načítat i XML a text.
Zápis funkce vypadá takto:
System.security.loadPolicyFile("http://www.domena.cz/");
A na této adrese musíte mít umístěn soubor crossdomain.xml (flash si ho najde sám, ale pokuď byste zadali do adresy celou URI až k tomu XML souboru, tak by se mohl jmenovat i jinak). Tento soubor musí mít například tento obsah:
<cross-domain-policy>
<allow-access-from domain="www.domena.cz" to-ports="1024" />
<allow-access-from domain="*.domena.cz" to-ports="906" />
</cross-domain-policy>
Může tam být řádků kolik chcete a můžete používat i zástupný znak hvězdičky. Druhý parametr je vždy port, který můžete také zadávat jako hvězdičku.
Jen bych upozornil, že tato funkce byla přidána až ve Flashi MX 2004.

Pokuď jste vše udělali správně, tak již můžete načítat data.

PS: V tomto článku nejsou zahrnuty novinky z Macromedia Flash 8 ball.

Flash a přístupnost

Další z často kritizovaných věcí na Flashi je právě přístupnost (hlasové čtečky jej nepřečtou, a navigace pomocí klávesnice je nemožná). Ale je tomu opravdu tak? Nebo je to jen neznalost či línost vývojářů?No možná už tušíte, že to druhé (jinak bych o tom možná ani nepsal).
První věcí, na kterou bych chtěl upozornit je navigace. Tu můžeme udělat jak pomocí klávesy TAB, tak klávesových zkratek. Pomocí klávesových zkratek to může vypadat třeba takto:
var zmacknuto = new Object();
zmacknuto.onKeyUp = function() {
if (Key.isDown(Key.CONTROL) && Key.getCode() == 97) {
_root.play();
}
};
Key.addListener(zmacknuto);
Tento script je například pro zkratku CTRL + 1. Můžete si samozřejmě vymyslet skoro jakékoli zkratky (třeba počáteční písmena položek menu).
Ale to jen na okraj (myslím, že toto by jste již znali, ale třeba nepoužili).

Ale vývojáři Flashe MX 2004 na přístupnost již mysleli a přidali dokonce přímo panel, který vše značně usnadňuje (nemusíte psát scripty). Najdete jej v menu Flashe a to v:
Windows -> Other Panels -> Accessibility
Obsah tohoto panelu se mění v závislosti na objektu, na který jste klikli.
Nejdúležitější je v něm zatrhnout položky Make Movie Accessibility a Make Child Objects Accessibility (oboje je přístupné, pokuď nemáte nic nakliklé). Poté jen vyplňujete u jednotlivých objektů (tlačítka a MovieClipy) příslušná políčka.
Pro jednotlivé objekty by jste měli vyplnit tyto políčka:
Dynamický text - Name, Description a Tab Index (statické texty, by jste měli převést na dynamické).
Input text, nebo tlačítka - Name, Description, Shortcut (shortcut nevytvoří script pro zkratku, ten musíte přidat podle návodu výše) a Tab Index.
MovieClip - Name a Description. Nezapomeňte zaškrtnout také Make Child Objects Accessibility.



Toto všechno samozřejmě, nestačí k 100% přístupnosti (tu u Flashe snad ani nejde), ale posunete se velký kus kupředu.

Studio 8 je už konečně zde

Tak dlouho očekávaná chvíle oficiálního vydání balíky produktů firmy Macromedia je zde. Trial verze můžete stahovat přímo z webu výrobce. Abych vám ulehčil hledání tak zde:

Nejdříve se, ale musíte zaregistrovat.

Mé první postřehy z Flashe 8 ball

Ihned co jsem zjistil, že se již dá Flash 8 ball stáhnout, tak jsem tak učinil a začal zkoumat co je v něm nového. A musím uznat, že mně mile překvapil.

Hned při zpouštění jsem si všiml podivné věci a to že se spouští alespoň o polovinu rychleji! :o)

První co jsem začal zkoumat byl panel Properties, který byl rozdělen na tři další (Properties, Filters a Parameters). A právě v podpanelu Filters na mě čekalo největší překvapení v podobě skvělých efektů, které vypadají opravdu velmi dobře a lehce se nastavují (efekty se dají nastavit dokonce i na text).

Další podle mého skvělé vylepšení je možnost nastavit průhlednost barvě výplně a dokonce i čáře přímo v panelu nástrojů.

Pro milovníky Flashe MX a starších byl k nevýslovné radosti (né mé) přidán zpět pomocník pro psaní ActionScriptu (bohužel si nezpomenu jak se to jmenovalo, ale dnes se to jmenuje Script Assist).

Nakonec jsem si ještě prohlídl nové komponenty (přibyly jen pro přehrávání videa a zvuku).

Naopak zklamání pro mě byla velikost výsledného souboru. Prázdný soubor byl o 6kb větší, než u Flash 7 a když jsem do něj nakreslil čtverec o velikosti 200x200px, tak byl dokonce větší o 19kb.

Také jsem čekal nějaké výraznější novinky v ActionScriptu (například něco pro 3D), ale marně (něco nového tam, ale samozřejmě je).

A nakonec jsem si nechal jednu kapitolu samu o sobě. V poslední době mě okouzlil Flash Lite (pro mobilní telefony). A s vydáním Flashe 8 ball byl nástup Flashe na mobily utvrzen. A to přidáním všeho co pro vývoj pro mobily potřebujete (právě toto se mi zdá jako jedna z největších vylepšení v novém Flashi 8 ball).

Flash 8 - první novinka v ActionScriptu

Při zkoumání novinek ve Flashi 8 ball jsem objevil třídu, která mě ohromila. Byl to upload souboru na server. Né že by to bylo něco neobvyklého v rámci webdesignu, ale co se týče Flashe tak ano.

Začnu jako obvykle scriptem:

// Import třídy flash.net
import flash.net.FileReference;
// Pole s typy souborů
var typy_souboru:Array = new Array();
// Vložení typů souborů
typy_souboru.push({description:"Images (*.jpg)", extension:"*.jpg"});
typy_souboru.push({description:"Text Files (*.jpeg)", extension:"*.jpeg"});
var listener = new Object();
listener.onSelect = function(soubor:FileReference) {
soubor.upload("./upload.php");
};
// Konstruktor pro třídu flash.net
var uploader:FileReference = new FileReference();
// Standartní listener
uploader.addListener(listener);
// Přidá do okna typy souborů, které je možno uploadovat
uploader.browse(typy_souboru);

Flash, ale neumí uploadovat soubor sám. Musíme proto použít nějaký script na straně serveru. Já jsem použil PHP (upload.php):

<?php
$file = $_FILES["Filedata"];
echo move_uploaded_file($file["tmp_name"], './images/' . $file["name"]);
?>

Díky komentářům ve scriptech byste již měli vědět jak to funguje. Pro správný běh musíte mít v jednom adresáři ten SWF, PHP soubor (upload.php) a adresář s názvem images s právy nastavenými na 777.

Upload by měl být omezen podle všeho na maximální velikost souboru na 100MB (nemám to potvrzeno).

Tato třída má samozřejmě více metod než jsem tady uvedl, ale pro pochopení by měl být tento příklad ideální, ale pro jistotu přidám ještě script pro jednoduchý preloader:

listener.onProgress = function(soubor:FileReference, bytesLoaded, bytesTotal){
nazev_textoveho_pole.text=(bytesLoaded/bytesTotal)*100;
}

Flash 8 - metadata

Jednou z dalších novinek Flashe 8 je mírné zlepšení SEO. Při vytváření nového dokumentu můžete přidat metadata, která vyhledávače vidí.

Po vytvoření nového dokumentu klikněte v panelu Properties na položku Size. Do políčka Title napište název flashe a do Description popis (text, který chcete, aby vyhledávače našly).

Bohužel nemůžu určit jak je to účinné, jestli to opravdu najdou všechny vyhledávače a jaký tomu budou dávat význam.

Flash 8 - PNG a GIF

Flash uměl až do Flashe MX 2004 načítat obrázky jen ve formátu *.jpg, ale Macromedia Flash 8 ball umí již načítat i obrázky ve formátu *.png a *.gif.

U obou formátů umí i průhledné pozadí.

Flash 8 - BevelFilter

Jak jistě víte tak největší novinkou ve Flashi 8 jsou mimo jiné i filtry. Dnes bych se chtěl zaměřit na BellFilter.

Pro použití filtru jej musíme nejdříve importovat. To provedete tímto scriptem:

import flash.filters.BevelFilter;

Poté vytvoříme konstruktor:

var muj_filtr:BevelFilter = new BevelFilter();

A nakonec použijeme filtr na MovieClip s názvem "muj_klip":

muj_klip.filters = new Array(muj_filtr);

Pokuď byste napsali jen toto, tak by se nám vytvořil tak jak jej nadefinovali tvůrci Flashe.

Pokuď byste potřebovali filtr upravovat tak pomocí těchto vlastností:

Nakonec může vypadat celkový zápis filtru třeba takto:

import flash.filters.BevelFilter;
var muj_filtr:BevelFilter = new BevelFilter();
muj_filtr.angle = 50;
muj_filtr.blurX = 40;
muj_klip.filters = new Array(muj_filtr);
Bevel filter

Striktní typování a jmenné konvence

Striktní typování a jmenné kovence slouží k zjednodušení a urychlení psaní kódu.
Striktní typování - Zapisuje se pomocí dvojtečky za názvem proměnné:
var moje_promenna:LoadVars=new LoadVars();

Takto vypadá zápis konstruktoru funkce LoadVars(). Pokuď nyní napíšete další řádek scriptu s tímto obsahem:

moje_promenna.

Tak by se vám měla objevit nabídka se všemi parametry funkce LoadVars z které stačí jen vybrat a nemusíte si přesně pamatovat jak se píše.

Jmenné konvence - Dalo by se říct, že je to to samé jako striktní typování, ale místo dvojteček se píše sufix (něco jako koncovka). Například pokuď napíše:

nazevMehoKlipu_mc.

Tak se vám objeví opět nabídka, ale tentokrát s parametry pro MovieClip (to _mc musí být sočástí názvu toho MC a né jen připsáno za názvem).

Sufixy existují tyto:

Nakonec bych upozornil, že slovíčko var před názvem proměnné je u striktního typování povinné. A že vše co bylo v tomto článku funguje, až od Macromedia Flash MX 2004.

Návštěvy ze zahraničí

Nevím nakolik je to obvyklé, ale na tento blog chodí přez Google více lidí ze zaheaničí, než od nás. Alespoň odhaduji to podle nastavení jazykové verze. Podle všeho jsem zde měl za poslední týden návštěvy z těchto jazykových verzí Googlu:

Takže je to 3:6. Je to obvyklá záležitost, nebo to tak mám jen já?

FPS a Flash Plugin

Taky jste si mysleli, že fps (framerate) je vždy taková jako ve Flashi nastavíte? A nebo, že jen při načítání animace je jiná a po načtení je už správná? Pokuď ano tak to je veliký omyl.

Dnes ráno mě zaujal jeden článek na tomto blogu. Jeho autor zjistil, že fps je taková jako ji nastavíte jen v Stand alone playeru (přehrávač ve Flashi), ale ani tam né vždycky. Z této skutečnosti vyplývá, že pokuď byste chtěli měřit nějaký čas pomocí fps (snímků za sekundu), tak to nebude nikdy přesné.


Nejvíce mě, ale zklamal plugin pro Firefox, který dopadl nejhůř.

FlashPlayer 8 a Adblock

Pokuď používáte Firefox a instalovali jste FlashPlayer 8 tak se vám mohlo stát, že se vám přestal zobrazovat všechen flash na stránkách.

Pokuď se vám to stalo tak věřte, že za to může Adblock, který si nějak s novým FlashPlayerem nerozumí. Pro zprovoznění musíte dát v menu Firefoxu:

Nástroje -> Adblock -> Nastavení -> Možnosti -> Zobrazovat ouška

A odškrtnout tuto položku.

Sice vám to znemožní jednoduché přidávání Flash-ových animací mezi blokované, ale ti šikovnější z vás si už poradí (stačí se podívat do zdrojového kódu stránky a přidat URL toho flashe mezi blokované).

Flash 8 - BlurFilter

Minule jsem vám předvedl jak použít BevelFilter. Dnes nás čeká BlurFilter.

Jako u každého filtru i u BevelFilter musíme nejdříve provést jeho import:

import flash.filters.BlurFilter;

Poté vytvoříme konstruktor:

var filtr:BlurFilter = new BlurFilter();

A nakonec filtr přiřadíme nějakému objektu:

nazev_objektu.filters = new Array(filtr);

Pokuď script necháme takto, tak se všechny parametry nastaví tak jak byly předdefinovány tvůrci Flashe. My je, ale budeme chtít ještě nejspíš upravit.

Použít můžete tyto parametry:

Výsledný script může vypadat takto:

import flash.filters.BlurFilter;
var filtr:BlurFilter = new BlurFilter();
filtr.blurX = 5;
filtr.blurY = 5;
filtr.quality=2
nazev_objektu.filters = [filtr];
Blur filter

Nejčastější potíže s češtinou

Velmi častým problémem hlavně začátečníků je správné zobrazování českých znaků v načítaném textu.

Tento problém vzniká díky špatně nastavenému kódování. Flash používá kódování UTF-8 a proto musíme i text, který načítáme mít v tomto kódování, jinak se vám stane, že místo č, ř, ž, ě a dalších znaků uvidíte jen čtverečky, nebo je neuvidíte vůbec.
Problémy vznikají nejčastěji v těchto případech:

Text se načítá z externího TXT souboru – je třeba jej uložit v kódování UTF-8 (nejjednodušší je dát v poznámkovém bloku Uložit jako.. a v kolonce Kódování vybrat UTF-8).

Text se načítá z PHP souboru – Je třeba uložit PHP soubor v UTF-8, u HTML nastavit kódování pomocí meta tagu:

<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
A v některých případech ještě přidat kódování do hlavičky:
header("Content-type: text/xml; charset=utf-8");
Ale je zde ještě možnost, že máte na serveru zapnuté automatické kódování češtiny. Pokuď ano tak jej stačí vypnout.

Všechny již jmenované – Flashi lze říct, aby přestal pracovat v kódování UTF-8 a to tímto ActionScriptem:
System.useCodepage = true;
Toto lze použít vždy. Pomůže vám to cca. V 90% případů.

Pokuď vám již nic nepomáhá a nevidíte jiné východisko, tak máte ještě jednu možnost, kterou lze použít kdykoli, ale není tak pohodlná. Jde o zápis textu v URL Encoding (znaky, které můžete vidět v URL). Tímto způsobem se také musejí zapisovat některé speciální znaky.

Připravil jsem pro vás formulář, který vám zadaný text převede právě do URL Encode:

This is alternative content.

Flash Player 8.5

Podle všeho by se měla objevit 17. října nová verze Flash Playeru a to 8.5.

Ten by měl již obsahovat ActionScript 3 a mnoho dalších vylepšení. Například:

Macromedia Blaze (Flash 9)

Nedávno jsme se dočkali vydání Flashe 8 a už se začíná pracovat na Flashi 9 s kódovým označením Blaze.Takže pokuď vám něco ve Flashi 8 chybí a chtěli byste to v nové verzi vidět, tak to stačí jen přidat do "knihy přání".

LoadVars

Všiml jsem si, že je často problém v načtení textu do Flashe, nebo naopak odeslání proměnných z Flashe. Mnoho lidí ještě stále používá loadVariables, nebo loadVariablesNum. Tyto funkce, ale neumožňují dostatečnou kontrolu nad daty a jsou prostě již zastaralé.

Použití této třídy je velmi jednoduché. Nejprve vytvoříme konstruktor:

var load_vars:LoadVars = new LoadVars();

A poté již voláme jen její metody, atd.

Nejjednodušší script pro načtení dat vypadá takto:

var load_vars:LoadVars = new LoadVars();
load_vars.load("nazev_souboru_s_daty.txt");
load_vars.onLoad = function() {
nactena_data = load_vars.nazev_promenne;
};

Tento kód vám načte data z TXT souboru. Data budou po načtení uloženy v proměnné "nactena_data".

Zdrojová data musí být ve formátu:

&nazev_promenne=A sem váš obsah

Symbol & slouží jako oddělovač, takže může být v jednom zdroji uloženo více proměnných za sebou (budou odděleny &).

----------------------------------------------------------------------------------------------------------

Další možnost použití je odesílání dat do PHP scriptu. Zápis by vypadal takto:

var load_vars:LoadVars = new LoadVars();
load_vars.promenna1 = "Hodnota1";
load_vars.promenna2 = "Hodnota2";
load_vars.send("nazev_souboru.php", "", "POST");

Tento script vám odešle proměnné promenna1 a promenna2 do PHP. V PHP budou pod proměnnýma $_POST['promenna1']; a $_POST['promenna2'];

----------------------------------------------------------------------------------------------------------

A třetí možností využití třídy LoadVars je odeslání a zároveň přijmutí dat (dá se využít například pro autorizaci). V tomto případě nemůžeme použít parametry load, ani send (data by se odeslala a uzavřelo se spojení, tím pádem bychom nedostali ty data, které nám stránka vypsala na základě dodaných informací). V tomto případě je třeba použít parametr sendAndLoad. Script by vypadal například takto:

var load_vars:LoadVars = new LoadVars();
load_vars.promenna1 = "Hodnota1";
load_vars.promenna2 = "Hodnota2";
load_vars.sendAndLoad("nazev_souboru.php", load_vars, "POST");
load_vars.onLoad = function() {
nactena_data = load_vars.nazev_promenne;
};

Nejdříve se odešlou proměnné promenna1 a promenna2 a hned poté se načtou dat, která nám PHP vrátilo (mohu například odeslat přihlašovací jméno a heslo a PHP mi vrátí zda je správné, nebo ne). Formát dat, které se načítají musí být stejný jako u parametru load.

----------------------------------------------------------------------------------------------------------

Nakonec mám pro vás seznam všech parametrů a událostí i s parametry:

Ukázku použítí si můžete stáhnout zde.

Čeština pro Flash

Všiml jsem si, že mi sem chodí pořád více lidí z vyhledávačů na spojení čeština flash, čeština pro flash, atd.. Proto jsem se rozhodl, že sem přidám odkaz na překlady produktů Macromedií (Dreamweaver, Contribute, Flash, FlashPaper, Fireweorks a FreeHand). Všechny češtiny naleznete na stránkách SQP Jaryn.

Volání funkce z textového pole

Pomocí funkce asfunction můžete volat jakoukoli funkci v ActionScriptu a to už od Flashe 5. Zmiňuji se o ní, protože je to velice málo známá funkce, které může být mnohdy velice užitečná.

Zápis je velice jednoduchý. Nejdříve si vytvoříte nějakou funkci:

function nazev_funkce() {
// Sem vložíte script, který má funkce vykonat
}

A potom přidáte do HTML textu, který vkládáte do textového pole například takovýto odkaz:

<a href="asfunction:nazev_funkce">klikni zde</a>

Po kliknutí by se vám měla provést ta funkce. Pokuď byste chtěli předávat funkci i nějaký parametr tak by to vypadalo například takto:

Funkce:

function nazev_funkce(parametr) {
// Sem vložíte script, který má funkce vykonat
}

Odkaz:

<a href="asfunction:nazev_funkce, hodnota_parametru">klikni zde</a>

Tisk z Flashe (PrintJob)

Někdy se hodí, aby si uživatel mohl část Flashe vytisknout. A právě touto problematikou bych se chtěl v tomto článku zaobírat. K tisku nám poslouží nejlépe třída PrintJob.

Nejjednodušší a zároveň nejpoužívanější je tisk framu na kterém se uživatel nachází. Provedeme to tímto scriptem:

var tisk:PrintJob = new PrintJob();
tisk.start();
tisk.addPage(0, {xMin:100, xMax:350, yMin:100, yMax:300});
tisk.send();
delete tisk;

Na prvním řádku vytvoříme konstruktor třídy PrinJob. Následně pomocí metody start(); otevřeme dialogové okno pro tisk. Třetím řádkem přidáme do zásobníku stránku, kterou chceme tisknout. Nula znamená _root, což znamená celý frame. Druhá položka jsou hranice plochy, kterou budeme tisknout. xMin = levý okraj, xMax = pravý okraj, yMin = horní okraj a yMax = dolní okraj. Tyto hodnoty jsou nepovinné. Pokuď bychom zadali jen první parametr (nulu), tak by se vytiskl celý aktuální frame. Předposlední řádek odešle data tiskárně a poslední vymaže třídu tisk (tím zamezíte různým problémům s tiskem).

Další možností je tisk určitého framu animace (nemusí to být ten na, kterém se nacházíte). Provedeme to takto:

var tisk:PrintJob = new PrintJob();
tisk.start();
tisk.addPage(0,{xMin:100, xMax:350, yMin:100, yMax:300},null, 3);
tisk.send();
delete tisk;

Oproti předchozímu scriptu přibyly dva parametry. První je options. Tento parametr může nabývat tří hodnot. null - bez hodnoty, {printAsBitmap:true} - bude se tisknout jako bitmapa, nebo {printAsBitmap:false} - nebude se tisknout jako bitmapa. Druhý parametr je frameNum, který právě udává číslo framu, který se má tisknout.

A do třetice bych ještě popsal způsob jak tisknout určitý MovieClip. Script vypadá takto:

var tisk:PrintJob = new PrintJob();
tisk.start();
tisk.addPage("nazev_MC");
tisk.send();
delete tisk;

Všechno zůstává stejné, jen místo nuly, která udává celý frame je zde název MovieClipu, který musí být v uvozovkách.

Nakonec tu mám přehled vlastností a metod třídy Printjob:

Má oblíbená literatura o Flashi

Za měsíc je zde štědrý den a s ním spojené dárky. Proto jsem se rozhodl, že uveřejním přehled literatury o Flashi s kterou mám zkušenosti a vím o ní, že je kvalitní. Třeba to někomu pomůže při rozhodování, kterou knihu zvolit.

Magický svět Macromedia Flash MX 2004

Dle mého názoru jde o nejlepší knihu o Flashi MX 2004 v češtině. Je v ní popsáno 12 projektů z nichž každý je zaměřen na jinou problematiku. Naučíte se z ní například používat CSS, třídy v ActionScriptu 2, vytvářet hry, reklamy a nebo také základy JSFL (výčet není kompletní).

Tuto knihu bych rozhodně nedoporučoval začátečníkům. Tato kniha se totiž nezabývá ani tak částmi scriptu (autor očekává, že většinu čtenář již zná), ale postupy při tvorbě jednotlivých prezentací.

Macromedia Flash MX 2004: oficiální výukový kurz

Tuto knihu bych narozdíl od předchozí doporučil i úplným začátečníkům. Naučí vás jak základnímu ovládání a nastavení Flashe, tak i základům ActionScriptu. Po přečtení této knihy byste měli být schopni vytvořit vlastní webové stránky.


Flash MX 2004 Actionscript - oficiální výukový kurz

Tato kniha je také určena pro úplné začátečníky. Doporučuji ji koupit zároveň s Macromedia Flash MX 2004: oficiální výukový kurz, protože na ní navazuje. Jak již název napovídá, tak jsou v ní popsány základy ActionScriptu a některé novinky z Flash MX 2004.

Naprogramujte si vlastní hru ve Flashi

Tak s touto knihou jsem začínal. I když podle názvu , tak nejvíce mně zaujala první část, kde je výborně popsán ActionScript. Je v ní popsán návod na vytvoření šesti her, mezi než patří například Pexeso, Flash Mario, nebo Závody motokár.

Flash MX professional 2004 pro vývojáře webových aplikací

Na tuto knihu pozor! Pokuď neumíte s ColdFusion, ASP.NET, nebo J2EE, tak jí v žádném případě nekupujte. Najdete v ní sice některé užitečné věci, ale bez znalostí serverů s ní nepohnete. Celá kniha začíná velmi rychlým vstupem do prostředí Flashe a hned poté začnete vytvářet první rozhraní ve Flashi. Naučíte se v ní používat XML, odesílat a přijímat data ze serveru. Používat komponenty a další.

AdBlock opraven

Včera večer vyšel Firefox 1.5 a s ním přišla i nová verze rozšíření AdBlock, která opravuje problém se zobrazováním flashe v FlashPlayeru 8.

TextSnapshot

Třída TextSnapshot slouží pro práci se statickým textem. Umožňuje v něm hledat, spočítat počet znaků, získat text, zjistit informace o jednotlivých písmenech i celém textu a další.

Nejdříve si musíme vytvořit pracovní prostředí. Vytvořte si MovieClip, který umístíte na hlavní časovou osu a jeho instanci nazvěte textMovie. Do tohoto MovieClipu vložte textové pole (musí být typu Static Text) a napište do něj tento text:

Ukázkový text třídy TextSnapthot!

Základní operace, kterou budeme s textem potřebovat provést je zjištění počtu znaků. Slouží k tomu metoda getCount(); celý zápis scriptu by vypadal takto:

var ziskany_text:TextSnapshot = textMovie.getTextSnapshot();
var znaku = ziskany_text.getCount();
trace(znaku);

Tento script a všechny následující v tomto článku umístěte na hlavní časovou osu. Po otestování by se vám mělo v Output panelu vypsat číslo 33, což je celkový počet znaků.
Pokuď jde o script, tak první řádek je konstruktor. Všimněte si, že jako cestu k textovému poli nezadávám jeho název (statické textové pole název mít nemůže), ale pouze název MovieClipu, kde se nachází. Proto je důležité, aby v každém MovieClipu bylo jen jedno statické textové pole. pokuď jich tam bude více, tak se počet znaků sečte.
Druhý řádek již obsahuje metodu, která do proměnné znaku uloží počet znaků.
A nakonec třetí řádek vypíše celkový počet znaků.

Další důležitou metodou je getText();. Tato metoda získá text z textového pole. Zápis scriptu vypadá takto:

var ziskany_text:TextSnapshot = textMovie.getTextSnapshot();
var znaku = ziskany_text.getCount();
var staticky_text = ziskany_text.getText(0, znaku);
trace(staticky_text);

Script je stejný jako předchozí, ale jen přibyla metoda getText, do které je třeba dodat dva argumenty. První je číslo znaku, od kterého se text vezme (v našem případě 0, což je počátek textu) a druhý je číslo znaku, do kterého se text vezme (v našem případě je to celkový počet znaků, takže celý text).

Někdy se může hodit zjsitit informace o textu. Provedeme to následujícím scriptem:

var ziskany_text:TextSnapshot = textMovie.getTextSnapshot();
var znaku = ziskany_text.getCount();
var info_pole = ziskany_text.getTextRunInfo(0, znaku);
trace(info_pole[0].indexInRun);// Číslo znaku
trace(info_pole[0].selected);// Udává zda je znak vybrán či ne
trace(info_pole[0].font);// Font znaku
trace(info_pole[0].color);// Barva znaku
trace(info_pole[0].height);// Výška znaku
trace(info_pole[0].matrix_a);// Hodnota pro matrix (prostorová deformace)
trace(info_pole[0].matrix_b);// Hodnota pro matrix (prostorová deformace)
trace(info_pole[0].matrix_c);// Hodnota pro matrix (prostorová deformace)
trace(info_pole[0].matrix_d);// Hodnota pro matrix (prostorová deformace)
trace(info_pole[0].matrix_tx);// Hodnota pro matrix (prostorová deformace)
trace(info_pole[0].matrix_ty);// Hodnota pro matrix (prostorová deformace)
trace(info_pole[0].corner0x);// Roh pomyslného okraje znaku
trace(info_pole[0].corner0y);// Roh pomyslného okraje znaku
trace(info_pole[0].corner1x);// Roh pomyslného okraje znaku
trace(info_pole[0].corner1y);// Roh pomyslného okraje znaku
trace(info_pole[0].corner2x);// Roh pomyslného okraje znaku
trace(info_pole[0].corner2y);// Roh pomyslného okraje znaku
trace(info_pole[0].corner3x);// Roh pomyslného okraje znaku
trace(info_pole[0].corner3y);// Roh pomyslného okraje znaku

První dva řádky jsou již známe a třetí je metoda TextRunInfo();, která uloží do pole info_pole informace o jednotlivých písmenech řetězce. Musíme do ní dodat opět dva argumenty a to číslo prvního a posledního znaku řetězce, o kterém chceme zjistit informace.
Následující řádky slouží k vypsání jednotlivých informací.

Ve statickém textu můžete i vyhledávat:

var ziskany_text:TextSnapshot = textMovie.getTextSnapshot();
var znaku = ziskany_text.getCount();
var zacatek = ziskany_text.findText(0, "text", true);
trace(zacatek);

První dva řádky jsou známe. Třetí řádek obsahuje metodu findText();, do které dodáváme tři parametry. První je číslo znaků, od kterého se začne hledat. Druhý je řetězec, který se bude hledat a třetí je hodnota buď true = rozlišuje velká a malá písmena, nebo false = nerozlišuje velká a malá písmena.
Poslední řádek vypíše číslo, které udává číslo znaku, kde byl řetězec nalezen.

Nakonec jsme se dostali k metodám, které umožňují výběr části textu. Pro jejich používání musíme udělat jednu změnu, bez níž by to nefungovalo. Je třeba přibalit fonty. Provedete to tak, že v knihovně kliknete na tlačítko v pravém horním rohu a dáte New Font... . Tam vyberte font, který budete používat a nějak jej pojmenujte. Potvrďte a poté nastavte u textového pole v panelu Properties jako font ten, který jste přibalili (bude mít to jméno, které jste mu dali a bude končit hvězdičkou). Pokuď jste vše provedli, tak se můžeme vrátit na hlavní časovou osu k psaní scriptu.

Začneme označením části textu pomocí metody setSelected(); :

var ziskany_text:TextSnapshot = textMovie.getTextSnapshot();
ziskany_text.setSelected(0, 10, true);

Tento script podbarví žlutě znaky 0 až 10. Způsobí to metoda setSelected();, do které se dodávají tři argumenty. První je číslo znaku, od kterého se začne označovat a druhý je číslo znaku, kterým se skončí. třetí argument je buď true = zadaný rozsah se označí, nebo false = zadaný rozsah se odznačí.

Pokuď potřebujete text podbarvit jinou barvou, než žlutou tak se to dělá pomocí metody setSelectedColor(); a script vypadá takto:

var ziskany_text:TextSnapshot = textMovie.getTextSnapshot();
ziskany_text.setSelected(0, 10, true);
ziskany_text.setSelectColor(0x00CC00);

První dva řádky jsou známé a třetí mění barvu výběru na zelenou (můžete použít jakoukoli jinou barvu).

Další možností je zjištění, zda je zadaná část řetězce označena, nebo ne). Dělá se to pomocí metody getSelected();. Do této metody se dodávají dva argumenty a to začátek řetězce a konec řetězce (číselná hodnota). Pokuď je řetězec označen vrací true, pokuď ne vrací false.

Poslední metodou je getSelectedText();. Tato metoda vrací označený text.

Nakonec jen dodám, že třída TextSnapshot byla přidána až do Flash MX 2004.

Macromedia a Adobe jsou jeden

Pokuď jste již dnes navštívili stránky Macromedií, tak jste si možná kromě nového designu všimli i nápisu Adobe formerly macromedia. Je to tím, že se právě dnes dokončilo předávání Macromedií firmě Adobe.

Flash Lite 2

Od dnešního dne můžete stahovat z Adobe Labs update pro Flash 8 Profesional.

Flash Lite 2 si můžete zakoupit zde a to za cenu 8 euro.


Další zajímavé odkazy k Flash Lite 2 :

Z JavaScriptu do Flashe

Dnes bych vám chtěl předvést jak jednoduše ovládat flash pomocí JavaScriptu. Ve Flashi do verze 8 lze sice provádět jen pár základních akcí, ale Flash 8 je na tom již daleko lépe.

Nejdříve si musíme nastavit pár informací ve scriptu pro vložení flashe do stránky:

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="550" height="400" id="example" align="middle">
<param name="allowScriptAccess" value="always" />
<param name="movie" value="example.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" /><embed src="example.swf" quality="high" swliveconnect="true" bgcolor="#ffffff" width="550" height="400" name="example" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>

Důležité informace jsou označeny tučně. Id a name určují název pod kterým budeme SWF volat, allowScriptAccess a swliveconnect umožňují připojení JavaScriptu k SWF. Né všechna nastavení musí být ve všech verzích Flashe (například allowScriptAccess musí být nastaveno na always až od verze 8).

Teď nám už jen stačí napsat JavaScript, kterým budeme SWF ovládat. Může vypadat například takto:

<a href="javascript:window.document.example.Play();">PLAY!</a>

K danému SWF se můžeme připojovat takto:

A metody, které můžeme volat jsou:

Tyto metody fungují ve všech verzích Flashe. Ale ve Flashi 8 došlo k zdokonalení. A jdou volat v podstatě jakékoli funkce. Ale o tomto napíši až v některém z příštích příspěvků.

Vícejazyčná aplikace

Již od Flashe MX 2004 jdou vytvářet vícejazyčné aplikace. Tato možnost není zatím moc využívaná a to hlavně proto, že o ní mnoho lidí neví a také proto, že Flash MX 2004 podporoval jen pár jazyku, mezi nimiž čeština nebyla. Ale Flash 8 přinesl velkou změnu. je zde již 21 podporovaných jazyků, mezi nimiž je i čeština. Slovenština zde bohužel chybí, ale jde přidat.

Nejdříve si musíme otevřít panel String (Window -> Other Panels -> String).

Klikněte na tlačítko Settings... a vyberte si jazyky, které chcete používat. Pokuď zde váš jazyk není přidejte ho pomocí políčka Custom language (Slovenština je sk (Slovak) ).

Dále můžete nastavit Replace strings (přepsání textu) a to na:

My vybereme Automatically at runtime.

Další položka je Default runtime language, neboli jazyk, který se použije pokuď žádný jiný nevyhovuje.

Nakonec dejte OK.

Potom si vytvořte dynamické textové pole.

Poté co na něj kliknete zadejte do panelu String jeho ID (třeba 1) a do políčka String napište text, který má obsahovat. Poté klikněte na Appy a dole v tabulce se vám objeví jako nová položka. Teď už stačí napsat jen do příslušného sloupečku překlad do daného jazyka. potom jen vyexportujte a vše je hotovo.

Vedle vašeho SWF souboru se vytvoří složky s názvy jednotlivých jazyků. A v nich XML soubory, s texty. Ty můžete libovolně editovat.

Stage

Třída Stage jak již název napovídá umožňuje dynamicky měnit nastavení plochy flashe. Můžete díky ní vytvořit například "dynamický layout" stránky, což se mi zdá na této třídě nejužitečnější.

Na začátek troch teorie. Třída Stage má tyto vlastnosti:

A má také jednu událost a to onResize, která nastane při změně rozměrů okna.

A teď již praxe. Na začátku jsem se zmiňoval o "dynamickém layoutu", takže se ho pokusíme nyní vytvořit. Aby jste věděli o čem mluvím vytvořil jsem menší příklad, který si můžete i stáhnout.

Nejdříve si nakreslete dva barevné pruhy libovolné výšky, které budou tvořit pozadí pravého a levého menu. Převeďte je na MovieClipy a instance obou MovieClipů pojmenujte pozadi. Potom každý z MovieClipů vložte do dalšího nového MovieClipu a umístěte je na ploše na pozice, kde se mají zobrazit při spuštění prezentace (jeden úplně vlevo a druhý vpravo). Ten vlevo pojmenujte leve_menu a ten vpravo prave_menu. Nakonec vytvořte dynamické textové pole, které vložte do MovieClipu jehož instanci nazvěte stred a umístěte ho tak jak můžete vidět na mém příkladu (mezi oba sloupce).

A konečně jsme se dostali do té nejdůležitější fáze a to scriptování. Celý script, který vložíte na hlavní časovou osu vypadá takto:

Stage.scaleMode = "noScale";
Stage.align = "TL";
var zmena_velikosti:Object = new Object();
zmena_velikosti.onResize = function() {
leve_menu.pozadi._height = Stage.height;
prave_menu.pozadi._height = Stage.height;
prave_menu._x = Stage.width-prave_menu._width;
stred._width = Stage.width-prave_menu._width-leve_menu._width-10;
};
Stage.addListener(zmena_velikosti);

Prvním řádkem nastavíme ploše, aby neměnila velikost (nepotřebujeme, aby se nám obsah roztahoval). Druhým řádkem nastavíme zarovnání plochy na levý horní roh okna (ulehčí nám to umisťování objektů do plochy).

Dále si vytvoříme objekt, pomocí, kterého budeme zpracovávat události, na které ho upozorní listener ("naslouchač"), který je na posledním řádku scriptu.

Událost, kterou nám náš objekt zpracuje je onResize. Ta nastane, při změně velikosti okna. Při každé změně okna budeme muset měnit rozmístění a rozměry objektů.

První řádek uvnitř složených závorek nastavuje výšku pozadí levého menu na výšku okna. Druhý řádek dělá to samé jako předchozí jen u pravého menu.
Třetí řádek vypočte pozici pravého sloupce a umístí jej na ní (od šířky okna se odečte šířka sloupce).
Čtvrtý řádek nastavuje šířku MovieClipu s textem. Vypočítá ji tak, že od šířky okna odečte šířku obou menu a ještě číslo 10 (tato hodnota tam být nemusí, dal jsem jí tam, aby text nezasahoval úplně až k menu).

Nakonec je třeba udělat pár změn v HTML souboru. Výšku a šířku Flashe zde nastavte na 100% (nezapomeňte, že to musíte nastavit jak u tagu object, tak embed). A pokuď chcete, aby byl flash přez úplně celou stránku, tak přidejte do tagu <head></head> tento styl:

<style type="text/css">
body{
margin:0px;
}</style>

Výsledný HTML kód může vypadat třeba takto:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs" lang="cs">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Dynamický Layout</title>
<style type="text/css">
body{
margin:0px;
}</style>
</head>
<body bgcolor="#ffffff">
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" width="100%" height="100%" id="dynamic_layout" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="dynamic_layout.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" /><embed src="dynamic_layout.swf" quality="high" bgcolor="#ffffff" width="100%" height="100%" name="dynamic_layout" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
</body>
</html>

A to je vše. Toto je jen jednoduchý příklad. Je samozřejmé, že by to šlo ještě zdokonalit, a že při složitějším layoutu bude mnohem více výpočtu, ale doufám, že vám tato ukázka pomohla k pochopení této problematiky.

Odstranění oušek AdBlock

Pokuď používáte FireFox a s ním i rozšíření AdBlock, pak jistě víte, že se u flashe zobrazuje na stránce ouško, které umožňuje jeho blokování. Nevýhoda těchto oušek je, že překrývají okolní obsah. Oušek se dá však lehce zbavit. Stačí přidat do CSS stránky:

div[id^='adblock'] { display:none !important;}

PS: Doufám, že tenhle blog nečtou lidé od reklamy. Byl bych nerad, kdyby kvůli tomuhle článku začaly být flashové reklamy bez oušek a tím pádem pro většinu běžných uživatelů takřka neodstranitelné.

Nové vyhledávání

Právě jsem spustil nové vyhledávání pro tento blog. To staré mi nevyhovovalo. Hledání je řešeno za pomoci Google Web API.

Podpora Flashe v prohlížečích

Byla uveřejněna nová statistka o rozšíření Flash Playeru. Můžete jí nalézt na stránkách Macromedií (Adobe). Z této statistiky vyplývá, že Flash Player 8 je již nainstalován zhruba na 50% všech počítačů připojených k internetu. A to je dle mého názoru za necelé 3 měsíce (byl vydán v říjnu 2005) celkem dost velký úspěch.

Z JavaScriptu do Flashe a zpět

Tento článek částečně navazuje na předchozí s názvem Z JavaScriptu do Flashe. Ale tentokrát se podíváme na novinky, které nám nabízí Flash 8.

Nová třída ve Flashi 8, která nám umožňuje komunikaci Flashe s JavaScriptem se nazývá ExternalInterface. Tato třída má dvě události a jednu vlastnost.

Abychom mohli vůbec začít musíme nejdříve upravit pár nastavení u standartního vkládání flashe do HTML:

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="550" height="400" id="pokusnySWF" align="middle">
<param name="allowScriptAccess" value="always" />
<param name="movie" value="zkouska.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" /><embed src="zkouska.swf" quality="high" bgcolor="#ffffff" width="550" height="400" name="pokusnySWF" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>

Důležité změny jsou zvýrazněné. Name a id jsou názvy pod kterými se budeme v JavaScriptu na ten SWF odkazovat. AllowScriptAccess umožňuje komunikaci na stránce (Flashe s JavaScriptem).

JavaScript -> Flash

Ve Flashi:

import flash.external.ExternalInterface;
ExternalInterface.addCallback("volani_z_JS", null, nazev_funkce);
function nazev_funkce() {
// Kód, který se má vykonat
}

Na prvním řádku importujeme třídu ExternalInterface. Na druhém řádku voláme metodu addCallback, která má 3 parametry. První je název metody, která se bude hlídat, druhý je objekt pro výsledky této metody (Tento parametr není důležitý a většinou se používá jen null - nejde jej vynechat) a třetí parametr je název funkce v ActionScriptu, která se při volání vykoná. A nakonec je funkce, která se bude volat.

Celé to funguje tak, že se hlídá volání metody v JS, jejíž název jsme zadali. Po zavolání této metody se provede příslušná funkce.

V HTML:

<form>
<input type="button" onclick="zavolejFlash()" value="Zavolej Flash" />
</form>
<script>
function zavolejFlash() {
adresovani("pokusnySWF").volani_z_JS();
}

function adresovani(nazev) {
if (navigator.appName.indexOf("Microsoft") != -1) {
return window[nazev]
}
else {
return document[nazev]
}
}

</script>

Tento kód vytvoří tlačítko po jehož zmáčknutí se zavolá funkce v JavaScriptu. První funkce se odkáže na dotyčný SWF a zavolá metodu volani_z_JS (tento název jsme zadali v ActionScriptu). Druhá funkce zjišťuje, v kterém prohlížeči je JavaScript spuštěn a podle toho vybere typ adresování.

Flash -> JavaScript

Ve Flashi:

import flash.external.ExternalInterface;
nazev_tlacitka.onRelease = function() {
ExternalInterface.call("JS_funkce", "Tato funkce byla volána z JS!");
};

Na prvním řádku importujeme třídu ExternalInterface. Na druhém řádku přiřadíme tlačítku (nazev_tlacitka) událost onRelease a této události funkci, která obsahuje metodu call.

Metoda call má jen 2 parametry. První je název funkce, která se má v JavaScriptu vykonat. A druhý parametr je parametr, který se předá volané funkci.

Samozřejmě, že nemusíme používat volání jen pomocí tlačítka, ale pro tento příklad se mi to zdá jako nejlepší volba.

V HTML:

<script>
function JS_funkce(paramatr){
alert(paramatr);
}
</script>

Tento kód obsahuje funkci, která bude volána z ActionScriptu. Po zavolání "vyhodí" okno (varování) s obsahem, který jsme zadali v ActionScriptu.

A nakonec malá ukázka vlastnoci available (bez komentáře):

import flash.external.ExternalInterface;
if (ExternalInterface.available == true) {
trace("Můžeme použít třídu ExternalInterface!");
} else {
trace("Nemůžeme použít třídu ExternalInterface!");
}

.

Flash Lite 2 Update pro Flash Proffesional 8

Byla vydána oficiální aktualizace Flash Proffesional 8 pro Flash Lite 2.

Stahovat jí můžete zde.

A vyšel také Mobile Device Profile #2. Bližší informace a možnost stažení naleznete zde.

Flash Lite 2 - vícejazyčný update

Nyní můžete stahovat 2. update Flash Lite 2 pro Flash Professional 8 v následujících jazycích:

PixelStyles 2

PixelStyles 2 je velmi zajímavé rozšíření, které vám umožní velmi snadno a rychle nastavit určité filtry na MovieClipy. Protože jsou filtry až od Flashe 8, tak je PixelStyles 2 také jen pro Flash 8.

Nečekejte od tohoto rozlišení nějaké novinky. Ty tam nenaleznete. Jde jen o to, že si vytvoříte nějaký efekt pomocí, například 5-ti různých filtrů a ten se vám tak líbí, že jej chcete použít i později na jiné objekty (řekněme, že vám jeho příprava zabrala 20 minut). Ale s tím použitím je teď problém, jak to přenést? Právě k tomuto se hodí PixelStyles. Nadefinovaný "styl" si uložíte a pak už jej můžete kdykoli znovu použít. PixelStyles má, ale i již předdefinované styly, které lze použít.

Existují 2 verze. BASIC - zdarma a PRO - placená (29.99 USD).


Po stažení a instalaci přibude do Flashe nový panel, který si musíte, ale nejdříve zapnout přes:

Window -> Other Panels -> Pixel Styles


Takto by měl vypadat:

Pixel Styles Full

Internet Explorer - ActiveX update

Dnes vydá Microsoft update pro Internet Explorer, která přináší velkou a hlavně velmi nepříjemnou změnu. Uživatelé IE budou muset spouštět ActiveX ovladače ručně (vše co je načteno jako OBJECT, APPLET, nebo EMBED). Jde tedy například o flash, či QuickTime. ActiveX ovladače se aktivují až kliknutím myši.

Existuje, ale naštěstí řešení, díky kterému "bude vše jako dřív", tedy jen pro uživatele. Pro webdesignéry ty znamená trošku práce navíc. Vše se řeší vkládáním přes JavaScript.

Vše potřebné bylo shrnuto již na stránkách Macromedií v článku Preparing Websites with Active Content for Announced Browser Changes.

Existují, ale ovšem i lepší řešení (tedy dělají to samá, ale ještě i něco navíc).

Jako nejlepší mi připadá UFO. Hlavní výhody jsou v rámci SEO, přístupnosti a to hlavně díky detekci FlashPlayeru a zobrazení alternativního obsahu pokuď je potřeba.

Flash 8 - Active Content Update

V minulém článku jsem psal o tom, jak řešit problém s aktivací ActiveX v IE. Nevšiml, jsem si, ale že Adobe vydalo update pro Flash 8, po jehož instalaci si stačí při nastavování exportu vybrat v záložce HTML šablonu Active Control Update - HTTP, nebo Active Control Update - HTTPS (záleží na protokolu, který chcete využívat). Flash již sám vygeneruje stránku, tak aby nebyla potřeba aktivace ActiveX.

Flash Player 9

Adobe přejmenuje Flash Player 8.5 na Flash Player 9. Tento krok se mi zdá správný, protože dosavadní Flash Player 8.5 je vlastně skoro kompletně předělán oproti verzi 8.0 a obsahuje ActionScript 3.0 a spoustu dalších novinek. Nejde tedy o minoritní verzi, ale naopak.

Sbohem macromedia.com

Dnešním dnem zanikly stránky macromedia.com. Doména je přesměrována na adobe.com. Tato změna se dala nicméně očekávat, protože jak jsem vás již informoval, tak Adobe převzala firmu Macromedia a sní i její produkty.

Toto, ale není jediná změna, která nastala. Adobe.com má od dnešního dne i nový vzhled, který až moc připomíná vzhled bývalého webu macromedia.com.

Přesměrováním adresy macromedia.com na adobe.com má za následek, také to, že ze seznamu stránek s PageRank-em 10 jedna stránka zmizí a to právě zmiňovaná macromedia.com.

Adobe Apollo

Rád bych vám představil jeden z málo známých projektů, který začal již za firmy Macromedia a to produktem Macromedia Central. Macromedia Central se tehdy dopracoval dostal až k verzi 1.5 a poté "skončil". Jeden z důvodů byly problémy, jako například nekompatibilita s některými jazykovými verzemi Windows (včetně češtiny).

Celý projekt se na dlouhou dobu odmlčel a vypadalo to, že je skutečně konec. Až se jednoho krásného dne objevily zprávy o tom, že se celý projekt přejmenoval a začal takřka odznova. Nový název je Adobe Apollo. Adobe Apollo by se mělo poprvé objevit někdy příští rok.

Co to vlastně Adobe Apollo je?

Jde o aplikaci, která spojuje technologie jako je Flash, Flex, HTML, JavaScript, Ajax, a PDF v jedno a umožňuje jednoduše vytvářet stolní aplikace (za pomoci právě těchto technologií). Tyto aplikace budou spustitelné stejně jako Flash na všech nejpoužívanějších operačních systémech.

Spouštění souborů

Věřím tomu, že mnoho z vás již vytvářelo nějakou prezentaci, z které jste potřebovali spustit nějaký soubor (například PDF, AVI, a podobně). Pokuď jste použili funkci getURL, jistě jste přišli na to, že je nemožné soubor spustit. Místo toho se vám nabídne na stažení, nebo se otevře až na další kliknutí (často u PDF). Jak, ale ten soubor spustit?

Je to vcelku jednoduché, ale rozhodně nepoužijeme funkci getURL. Stačí využít fscommand a souboru *.bat. Začneme scriptem, který můžete umístit na tlačítko ve Flashi, které bude sloužit k otevření souboru:

on(release){
	fscommand("exec","spousteciSoubor.bat"); 
}

Tento script nám po kliknutí na tlačítko spustí soubor spousteciSoubor.bat, který si za okamžik vytvoříme. Důvod proč spouštíme nějaký soubor *.bat a né přímo soubor, který chceme ve výsledku spustit (PDF, AVI, ....) je prostě ten, že to Flash neumí.

Nyní si vytvoříme soubor spousteciSoubor.bat. Vytvořit jej můžete například v poznámkovém bloku (stačí změnit příponu souboru).

Obsah tohoto souboru by měl vypadat takto:

start nazevSouboru.pripona

Tento kód provede po spuštění souboru *.bat spuštění vámi zvoleného souboru.

Na konec pár důležitých informací:

Umí Flash počítat? - aneb flashová hádanka

Co myslíte, že vám Flash vrátí za hodnotu pokuď v něm spustíte tento script:

var i = 1;
i += i++ + ++i;
trace("i="+i);

Jen upozorním, že nesmíte nechat script formátovat Flashem (odstranil by mezery mezi těmi + a ty tam být musí). Jsem zvědavý, kdo mi to dokáže odůvodnit (výsledek je totiž správný).

Tento script je převzat ze stránek Christophe Herreman-a.

Plugin Switcher

Dlouho jsem řešil problém při testování animací v různých verzích flash playeru. Ve svém prohlížeči mám vždy aktuální verzi a pokuď bych chtěl provést nějaký test na starším flash playeru, tak bych si ho musel nainstalovat a tím pádem zároveň odinstalovat ten nový. Ale tomu je již konec!

Narazil jsem na program, který umí změnit verzi pluginu pouhým kliknutím. Tento program se jmenuje Plugin Switcher a umí měnit daleko více pluginů, než jen flash player.Po instalaci jej stačí spustit a na záložce Flash vybrat v dolní části v rozbalovací roletce příslušnou verzi flash playeru a kliknout na install. Chvíli počkejte a je hotovo.

K tomuto programu mám jen jedinou výtku a to, že umí nainstalovat flash playery až od verze 7 a mi by se celkem občas hodil i flash player 6.

Mobile Device Profile Update 3 pro Flash Professional 8

Vyšel v pořadí již třetí update pro Flash Professional 8. Tento update obsahuje nové profily pro Flash Lite a opravuje několik chyb. Přidána byla podpora pro tyto telefony:

Stahovat můžete zde.

Flash Professional 9 ActionScript 3.0 Preview

Adobe dnes uvolnilo Flash Professional 9 ActionScript 3.0 Preview. Po instalaci se vám z dosavadního Flashe 8 "stane" Flash 9. I když "stane" není zrovna správný výraz. Ve skutečnosti vám jen do Flashe 8 přibude podpora ActionScript 3.0, takže můžete již dnes začít vyvíjet nové aplikace za pomoci všech novinek, které ActionScript 3.0 obsahuje.

No už asi zase končíme :o(

Jak jste si mohli všimnout, již delší dobu jsem nenapsal žádný článek. Měl jsem k tomu tři důvody:

Ale teď, když jsem se již rozhodl napsat nějaký ten článek jsem se dozvěděl nemilou skutečnost. Cituji z domovské stránky mého freehostingu:

Z důvodů zvyšování kvality služeb jsme pozastavili objednávky nových freehostingů, stávající budou zrušeny 30.9.2006. Připravujeme nové, jiné řešení. Děkujeme za pochopení

No chápat to chápu, ale zrovna nadšený nejsem a náladu na přesun jinam taky nemám, takže pokuď se nestane zázrak tak bude ke dni 30.9. 2006 tento blog smazán, což bude znamenat zároveň konec s mým blogováním. Proč se mi zdá, že lepší reklamu si Xhosting udělat nemohl. Pokuď se totiž nepletu, tak veškeré odkazy co vedou na freehosting (tedy i na tento blog) povedou od 30.9. 2006 přímo na Xhosting. Ale co nadělám...

A kdyby vás zajímalo co znamená to zase v nadpise, tak to není poprvé co jsem s něčím skončil kvůli hostingu. Byl to také web o Flashi a to na doméně oflashi.com. Tehdy se mi, ale ani nepodařilo dozvědět z jakého důvodu ten hosting "zmizel".