Symbol Graphic a vložené MovieClipy

Březen 5th, 2009

Symboly typu Graphic moc nevyužívám a možná i proto mě poměrně zaujalo zjištění, jak se chovají na scéně. Graphic symbol nemůže mít název instance, proto jej nelze v AS2 ovládat (v AS3 to samozřejmě jde), ale co se stane, když do něj ručně vložíme (ve Flashi CS3/4) nějaký aktivní prvek (tlačítko, MovieClip) a odkážeme se na _parent objekt?  Scéna vypadá takto:

Pokud se v MovieClipu objekt_2 odkážeme na nadřazený objekt, dostaneme zpět referenci na objekt_1. Jak to bude vypadat z opačného směru při parsování pomocí AS3?:

var num:uint = objekt_1.numChildren;
trace("num: "+num);
for (var i:uint=0; i<num; i++) {
    trace(obj_mc.getChildAt(i));
    trace(obj_mc.getChildAt(i).name);
}

Výpis v output okně:

num: 2
[object Shape]
instance1
[object MovieClip]
objekt_2

Je tak potvrzeno, že pokud vložíme do Graphic symbolu jiný objekt, sice je jakoby uvnitř Graphic symbolu, ale reálně je na stejné úrovni jako samotný symbol Graphics. Je to celkem pochopitelné, protože Shape objekty nemohou obsahovat vložené objekty z DisplayObject třídy. Pouze prostředí Flashe CS3/4 může díky možnosti vkládání objektů do těchto Graphics symbolů přinášet trochu nejasností při jejich zpracování pomocí ActionScriptu.

List komponenta a pořadí vybraných položek

Březen 4th, 2009

Při použití List komponenty, u které máme povolen výběr více položek přes atribut allowMultipleSelection="true", nám vrací pole vybraných prvků vždy v tom pořadí, ve kterém provedl uživatel výběr. V některých případech ale potřebujeme získat seznam vybraných prvků přesně v tom pořadí, v jakém jsou umístěn v komponentě, bez ohledu na způsob výběru. Řešením je přistoupení k vybraným objektů pomocí atributu selectedIndices, který vrací indexy vybraných položek (opět v pořadí dle volby uživatele). Před jejich dalším zpracováním stačí už jenom provést seřazení v poli:

var arr:Array = komponentaList.selectedIndices;
trace("Původní pořadí prvků
podle výběru uživatele: "+arr);
arr.sort(Array.NUMERIC|Array.DESCENDING);
trace("Nové pořadí prvků podle
jejich umístění v komponentě: "+arr);

Microsoft má radši flashplayer

Březen 2nd, 2009

Každý důvod, jak si rýpnout do konkurenční technologie se hodí, takže: proč se Microsoft chlubí se Silverlightem a skvělým přehráváním videa, když sám používá pořád Flash? Viz web MSN.

Dávkové snímkování webů

Březen 2nd, 2009

Na root.cz jsem nedávno objevil zajímavý článek o tom, jak Seznam.cz provádí snímání webů. Nejvíce mne upoutala zmínka o webkit jádru, které bylo uvažováno jako jedna nových alternativ pro nový systém snímání obrazovek.  Nejčastěji byly zmiňované problémy se špatnou detekcí kompletního načtení webové stránky a tak jsem si vzpoměl na AIR, kde máme také Webkit k dispozici a kde je detekce kompletního načtení webu k dispozici. Během hodinky tak byl na světě AIRový program, který snímá webové stránky bez nutnosti naší interakce. Zdroják aplikace je v detailu článku.

Read the rest of this entry »

Pro externí obrázky crossdomain neplatí?

Únor 26th, 2009

Včera jsem díky diskuzi na Flash.cz začal testovat načítání externích obrázků z jiných domén, u kterých není povoleno načítání pomocí crossdomain.xml a jaké bylo moje překvapení, když jsem zjistil, že to možné je. Jak je ale uvedeno v debatě, takto načtené obrázky nelze dále editovat například pomocí bitmapdata třídy, k tomu už crossdomain.xml potřebujeme.

Zajímalo by mne, od kdy je toto možné, protože jsem až dodnes žil v domění, že i pro externí obrázky je nutné povolení přes crossdomain.xml. Zprvu jsem myslel, že jde o povolení jen u AS2, ale i v případě AS3 a Loader třídy je možné načítat externí obrázky (i SWF soubory) z cizích domén.

cs!=cn

Únor 26th, 2009

Po delší době jsem potřeboval nastavit něco ve flashplayeru, české prostředí je fajn, ovšem tlačítko "Další volby" nás celkem bezproblémů dovede na čínskou stránku nastavení flashplayeru. Uvidíme, jestli se tím budou zabývat. Více zde.

Srovnání Flash - Silverlight

Únor 24th, 2009

Velmi pěkný článek porovnávající obě technologie: http://www.daniellove.net/blog/?p=146 Je dobré znát alternativy a do jisté míry i konkurenční technologii.

CS4 - easter eggs

Únor 23rd, 2009

Když jsem po několika dnech pracovního výpadku "náhodou" spustil Flash CS4, napadlo mě otestovat, jestli tvůrci dali na obvyklé místo (copyright u FLASH) "easter eggs".  Ale kliknutí pouze zpomalilo pohyb textu, takže jsem se přesunul na google a tam zjistil následující bodíky:

Jedná se o okno "About Flash CSx...", kde po kliknutí na copyright za Adobe nebo za Flash textem, dojde ke zpomalení pohybu textu. Navíc je aktivní i číslice 4, pod kterou se objeví známý přehled vývojového týmu:

Zip archiv pomocí ActionScriptu

Únor 18th, 2009

Na základě častých požadavků zákazníků se momentálně zabývám možností exportu PDF dokumentů z flashových aplikací. Nejjednodušší cesta je přímý tisk do PDF, ovšem jsou zde jistá omezení, především v rozlišení bitmapových objektů. Ideálním řešením se jeví MARS projekt, který umožňuje pomocí XML dokumentu popsat strukturu PDF dokumentu, který se následně vygeneruje pomocí pluginu v Acrobat Readeru.  Vše je ale nutné předem připravit jako ZIP archiv, což s ActionScriptem 3.0 není žádný problém. Metoda compress u ByteArray třídy nám to umožňuje. Jejích možností využívá aszip knihovna, díky které snadno vytvoříme ZIP archiv přímo ve flashové aplikaci. S využitím flashplayeru 10 pak nabídneme uživateli jeho přímé stažení. Podrobnější článek vyjde příští týden na flash.cz, zatím tedy krátká ukázka:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
<mx:Script>
    <![CDATA[
        import org.aszip.saving.Method;
        import org.aszip.zip.ASZip;
        import mx.graphics.ImageSnapshot;
        private function saveZIP():void{
            var f_ref:FileReference = new FileReference();
            var png_snapshot:ImageSnapshot = ImageSnapshot.captureImage(comp);
            var zip:ASZip = new ASZip();
            zip.addDirectory("imgs");
            zip.addFile(png_snapshot.data,"imgs/img.png");
            f_ref.save(zip.saveZIP(Method.LOCAL),"archiv.zip");
        }
    ]]>
</mx:Script>
    <mx:Button click="saveZIP()" label="Uložit jako PNG v ZIPu"/>
    <mx:RichTextEditor id="comp" height="200" width="350">
    </mx:RichTextEditor>
</mx:Application>

České CS3,CS4

Únor 15th, 2009

České lokalizace Flashe jsou mojí malou noční můrou. Možná jsem moc náročný, možná je to dáno tím, že si u anglické verze člověk časem osvojí vlastní "vnitřní" překlad konkrétních termínů, ale pojmy typu "Kopírovat umístění vazby" = Copy link target, "Vytvořit klasické doplnění" = Create motion tween,

"Obrazové body (obr.b.)" = Pixely (px) a další "vychytávky" spojené třeba s českou lokalizací debuggeru, mě nenechávají v klidu. Zvlášť výrazy z debuggeru jsou dost nesrozumitelné, hodně těžko se pak cokoliv ladí. Například hláška: 1137: Nesprávný počet argumentů. Očekáváno více než: 1. v originálu znamená přesný opak: 1137: Incorrect number of arguments.  Expected no more than 1. Odůvodnění vyšších cen Adobe produktů v EU s tím, že je náročnější lokalizace pak vypadá jako velmi nepovedený vtip, ale možná, že pro nás Adobe chystá jako bonus ještě překladový slovník z "adobe češtiny" do srozumitelné češtiny.