<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Adobe User Group Poznań &#187; Tutoriale</title>
	<atom:link href="http://augpoznan.eu/category/tutoriale/feed/" rel="self" type="application/rss+xml" />
	<link>http://augpoznan.eu</link>
	<description>Grupa użytkowników oprogramowania Adobe Poznań</description>
	<lastBuildDate>Mon, 19 Dec 2011 11:05:44 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Model 3D do testowania 3D we Flash&#8217;u</title>
		<link>http://augpoznan.eu/model-3d-do-testowania-3d-we-flashu/</link>
		<comments>http://augpoznan.eu/model-3d-do-testowania-3d-we-flashu/#comments</comments>
		<pubDate>Mon, 24 May 2010 13:10:47 +0000</pubDate>
		<dc:creator>Robert</dc:creator>
				<category><![CDATA[Tutoriale]]></category>

		<guid isPermaLink="false">http://augpoznan.eu/?p=157</guid>
		<description><![CDATA[
Jeżeli ktoś chce się pobawić 3D we Flashu, Unity czy choćby w Photoshopie &#8211; na stronie BlackMoon&#8217;a można sobie ściągnąć low-poly model 3D. Darmowy, do wykorzystania prywatenie i komercyjnie. W sam raz do testowania i nauki. 
]]></description>
			<content:encoded><![CDATA[<p><a href="http://blackmoondev.com/t-rex-walking-animation-and-free-model-for-download/"><img src="http://blackmoondev.com/wp-content/uploads/2010/05/dino.jpg" alt="TRex" style="padding: 5px; border: 1px #dccfcd solid;" /></a></p>
<p>Jeżeli ktoś chce się pobawić 3D we Flashu, Unity czy choćby w Photoshopie &#8211; na stronie <a href="http://blackmoondev.com/t-rex-walking-animation-and-free-model-for-download/">BlackMoon&#8217;a</a> można sobie ściągnąć low-poly model 3D. Darmowy, do wykorzystania prywatenie i komercyjnie. W sam raz do testowania i nauki. </p>
]]></content:encoded>
			<wfw:commentRss>http://augpoznan.eu/model-3d-do-testowania-3d-we-flashu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wprowadzenie do Open Source Media Framework</title>
		<link>http://augpoznan.eu/wprowadzenie-do-osmf/</link>
		<comments>http://augpoznan.eu/wprowadzenie-do-osmf/#comments</comments>
		<pubDate>Fri, 26 Mar 2010 22:41:54 +0000</pubDate>
		<dc:creator>wrobel</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Tutoriale]]></category>

		<guid isPermaLink="false">http://augpoznan.eu/?p=129</guid>
		<description><![CDATA[Wprowadzenie do

Słowem wstępu
Od kiedy pojawiły się pierwsze wzmianki o środowisku które ujednolici proces tworzenia media playerów, wiedziałem że to będzie coś czym będzie warto się zainteresować. Dlaczego zabieram się do tego dopiero teraz, skoro używać tego można było już rok temu? Ano dlatego że niedawno wydano OSMF Sprint 10 (ver. 0.93), a w tym wydaniu [...]]]></description>
			<content:encoded><![CDATA[<h1 style="text-align: center;">Wprowadzenie do</h1>
<p style="text-align: center;"><img class="size-full wp-image-150  alignnone" title="osmf_logo" src="http://flexibleair.files.wordpress.com/2010/03/osmf_logo.jpg" alt="OSMF" width="198" height="50" /></p>
<h2>Słowem wstępu</h2>
<p>Od kiedy pojawiły się pierwsze wzmianki o środowisku które ujednolici proces tworzenia media playerów, wiedziałem że to będzie coś czym będzie warto się zainteresować. Dlaczego zabieram się do tego dopiero teraz, skoro używać tego można było już rok temu? Ano dlatego że niedawno wydano OSMF Sprint 10 (ver. 0.93), a w tym wydaniu nastąpił tzw API Lock-down, czyli API nie powinno się już zmieniać. To znaczy że przykłady pisane do tej wersji będą w pełni zgodne z następnymi wersjami. Zatem czym jest Open Source Media Framework (codename Strobe)? W uproszczeniu jest to framework który pomaga zająć się wszystkimi rzeczami, które powinno się zrobić raz i które powinny być stosowalne w każdym innym projekcie wykorzystującym media każdego typu. Bardziej konkretnie mówiąc to OSMF jest rozszerzalny za pomocą pluginów framework do tworzenia rozbudowanych odtwarzaczy różnego typu mediów, w różnych konfiguracjach, ze wsparciem predefiniowanych jak i własnych systemów reklam oraz wiele więcej. Został stworzony by ułatwić życie przy tworzeniu media playerów oraz skrócić czas ich developementu. Każdy kto tworzy video playery na pewno zna te problemy, z którymi się spotyka przy ich tworzeniu. Zabierają one czas, którego nie ma, a każdy następny video player, choć niby podobny to trzeba jak zawsze wiele rzeczy zmieniać<span id="more-129"></span></p>
<h2>Podstawy</h2>
<p>Teraz czas pokazać jak to się je. Może najpierw trochę o podstawowych elementach jakich użyjemy w przykładowym playerze.</p>
<ul>
<li><strong>MediaElement</strong> &#8211; podstawowa klasa przechowująca informacje o medium, które chcemy odtworzyć. Wszystkie jej pochodne można dodać do <em>MediaPlayer</em>&#8216;a. Oto kilka z subklas: <em>VideoElement, AudioElement, SWFElement, ImageElement, ParallelElement </em>oraz<em> SerialElement.</em></li>
<li><strong>VideoElement</strong> &#8211; Jak napisałem w punkcie powyżej jest to podstawowy element tego co chcemy pokazać. Przy tworzeniu nowej instancji wystarczy podać URL video jako instancje <em>URLResource</em>.
<pre class="brush: as3; title: ;">
var videoElement:VideoElement = new VideoElement(new URLResource(VIDEO_URL));
</pre>
</li>
<li><strong>MediaPlayer</strong> &#8211; kontroler przez którego operujemy <em>MediaElement</em>&#8216;em który załadowaliśmy. Ważnymi informacjami jakie możemy odczytać z mediaPlayer&#8217;a są tzw &#8220;traits&#8221;. Są to cechy mediaElement&#8217;u takie jak: <em>canPlay, canPause, canSeek</em> albo <em>canLoad</em>. Są one pomocne przy określaniu które elementy interfejsu mają być aktywne. Nowy element przypisujemy do właściwości <em>media.</em> Jeśli chcemy nasłuchiwać jak zmienia się stan naszego mediaElementu to wszystkie eventListenery przypisujemy przez <em>MediaPlayer.</em>
<pre class="brush: as3; title: ;">
var mediaPlayer:MediaPlayer = new MediaPlayer();
mediaPlayer.media = videoElement;
</pre>
</li>
<li><strong>MediaContainer</strong> &#8211; Warto wspomnieć, że żadna z powyżej przedstawionych klas nie ma swojej wizualnej reprezentacji tzn nie dziedziczy po <em>DisplayObject </em>więc nie można jej dodać do sceny. I tutaj najwyższy czas na klasę która jest tym kontenerem, który renderuje wszystkie dodane media. <em>MediaContainer</em> dziedziczy po <em>Sprite</em>. <em>MediaElement</em> dodajemy przez metodę <em>addMediaElement.</em>
<pre class="brush: as3; title: ;">
var mediaContainer:MediaContainer = new MediaContainer();
mediaContainer.addMediaElement(videoElement);
addChild(mediaContainer);
</pre>
</li>
</ul>
<h2>User Interface</h2>
<p>To tyle z takich najbardziej podstawowych elementów niezbędnych do stworzenia prostego video playera. Składając te elementy razem otrzymamy video wyświetlające podany film. Tylko nie mamy jeszcze możliwości operowania tym filmem. Cały UI musimy napisać sami gdyż jest to część niezależna od wyświetlanego video, a klasa <em>MediaPlayer </em>jest tylko interfejsem przez który sterujemy wyświetlanym kontentem. Dla mało wymagających jest biblioteka o nazwie <em>ChromeLibrary</em> która zawiera oprogramowany interfejs gotowy do wykorzystania. Można go znaleźć w ZIPie ze źródłami pod ścieżką: <em>source/libs/ChromeLibrary/.</em> Przykładowy player wykorzystujący <em>ChromeLibrary</em> jest do przejrzenia pod ścieżką: <em>source/apps/samples/framework/OSMFPlayer</em>. Wszystkie niezbędne informacje są w źródłach.</p>
<p>W moim przykładzie wykorzystuję <a title="MinimalComps" href="http://www.minimalcomps.com/" target="_blank">MinimalComps</a> autorstwa Keitha Petersa aka <a title="BIT-101" href="http://www.bit-101.com/blog/" target="_blank">BIT-101</a>. Jest to zestaw świetnych i bardzo prostych komponentów, które najlepiej sprawdzają się w aplikacjach testowych lub przykładowych. Dzięki temu do otworzenia tego przykładu nie potrzebujemy Flash&#8217;a. Wystarczy Flex SDK oraz wymagane biblioteki. Cały proces tworzenia UI jest wewnątrz funkcji <em>createUI().</em> Wydaje mi się że opisywanie tej części nie jest potrzebne do zrozumienia tematu posta. Jeśli macie pytania, piszcie je w komentarzach.</p>
<h2>Layout</h2>
<p>OK, więc mamy już nasz film wyświetlony na scenie i gra. Współgra z nim user interface. Wygląda to tak:</p>
<p><img class="alignnone size-full wp-image-168" title="Application layout" src="http://flexibleair.files.wordpress.com/2010/03/app.jpg" alt="Application layout" width="655" height="407" /></p>
<p>Teraz chcemy sami określić w jaki sposób ma pojawiać się video w naszym playerze. Tutaj przychodzi z pomocą <em>layoutMetadata</em>. Jest to właściwość typu <em>LayoutMetadata </em>każdego obiektu ( implementującego <em>ILayoutTarget</em>. <em>LayoutMetadata </em>zawiera całą masę różnych parametrów, które ustawią nasz kontent.</p>
<p>Oto lista  właściwości <em>LayoutMetadata</em>:</p>
<ul>
<li><em>horizontalAlign </em>oraz <em>verticalAlign</em> (Przyjmują wartości stałych statycznych z klas <em>HorizontalAlign </em>oraz<em>VerticalAlign);</em></li>
<li><em>x, y, width </em>oraz <em>height;</em></li>
<li><em>percentX, percentY, percentWidth </em>oraz <em>percentHeight;<br />
</em></li>
<li><em>scaleMode </em>(Przyjmuje wartości stałych statycznych z klasy <em>ScaleMode</em>);</li>
<li><em>layoutMode </em>(Przyjmuje wartości stałych statycznych z klasy<em> LayoutMode</em>);</li>
<li><em>left, right, top </em>oraz <em>bottom;</em></li>
<li><em>paddingLeft, paddingRight, paddingTop </em>oraz <em>paddingBottom;</em></li>
<li><em>snapToPixel</em></li>
<li><em>includeInLayout</em></li>
<li><em>synthesizer</em></li>
</ul>
<p>Większości z tych właściwości nie trzeba wyjaśniać. Po resztę odsyłam do <a title="LayoutManager in OSMF Language Reference" href="http://help.adobe.com/en_US/OSMF/1.0/AS3LR/org/osmf/layout/LayoutMetadata.html" target="_blank">Language Reference.</a></p>
<p>W swoim przykładzie dodałem opcję dynamicznego zmieniania rodzaju skalowania video (kontrolka w prawym górnym rogu). Aby ustawić sposób wyświetlania jaki chcemy to musimy zmienić parametry właściwości <em>layoutMetadata</em>. W przypadku <em>MediaElement </em>musimy utworzyć nową instancję klasy <em>LayoutMetadata</em>, przypisać wszystkie wartości jakie chcemy, a na końcu skorzystać z metody <em>addMetadata</em>. Podany przykład wyłącza skalowanie (zoom = 100%) i ustawia video pośrodku kontenera:</p>
<pre class="brush: as3; title: ;">
//Przypisanie layoutMetadata do mediaContainera (MediaContaiener)
mediaContainer.layoutMetadata.width = videoCont.width;
mediaContainer.layoutMetadata.height = videoCont.height;
mediaContainer.layoutMetadata.scaleMode = ScaleMode.NONE;

//Przypisanie layoutMetadata do videoElementu przez addMetadata (MediaElement)
var layoutMetadata:LayoutMetadata = new LayoutMetadata();
layoutMetadata.scaleMode = ScaleMode.NONE;
layoutMetadata.width = videoCont.width;
layoutMetadata.height = videoCont.height;
layoutMetadata.horizontalAlign = HorizontalAlign.CENTER;
layoutMetadata.verticalAlign = VerticalAlign.MIDDLE;
videoElement.addMetadata(LayoutMetadata.LAYOUT_NAMESPACE, layoutMetadata);
</pre>
<h2>MediaElement</h2>
<p>Teraz może trochę o klasach, które przechowują wszystkie informacje o tym, co chcemy wrzucić do media playera. Podstawową klasą jest <em>MediaElement</em>. Mając gotowe wszystkie elementy tj <em>mediaPlayer </em>oraz <em>mediaContainer </em>wystarczy tylko stworzyć nową instancję wybranej subklasy <em>MediaElement</em>&#8216;u oraz dodać go do <em>mediaPlayer</em>&#8216;a oraz <em>mediaContainer</em>&#8216;a.</p>
<pre class="brush: as3; title: ;">
var myVideo:VideoElement = new VideoElement(new URLResource(VIDEO_URL))
mediaPlayer.media = myVideo
mediaContainer.addMediaElement(myVideo);
</pre>
<p>W ten sposób dodaliśmy video do <em>mediaPlayer</em>&#8216;a, aby można było nim sterować, oraz do <em>mediaContainer</em>&#8216;a, aby można było zobaczyć nasze video. Z tak niewielkim kawałkiem kodu dodaliśmy nowy element. Co ciekawe, równie łatwo możemy zmieniać aktualnie puszczane media. Należy tylko pamiętać aby usunąć poprzednio załadowane medium. Oto kod:</p>
<p>Przydałoby się również opisać po krótce resztę używanych tutaj <em>MediaElement</em>&#8216;ów. Oto one:</p>
<ul>
<li><strong>AudioElement </strong>- pozwala na odtwarzanie dzwięku zarówno streamingowanego jak i progresywnie ładowanego. Można załadować MP3 oraz AAC.</li>
<li><strong>ImageElement</strong> &#8211; dzięki niemu możemy pokazać obrazy wewnątrz naszego playera. Wspiera PNG, GIF oraz JPG.</li>
<li><strong>SWFElement</strong> &#8211; tutaj możemy załadować dowolny swf.</li>
<li><strong>ParallelElement</strong> &#8211; jak nazwa wskazuje, kilka elementów odtwarzanych jednocześnie. Np. zdjęcie z podkładem muzycznym albo wyciszone video z różnymi ścieżkami dźwiękowymi.</li>
<li><strong>SerialElement</strong> &#8211; element ten wyświetla dodane elementy jeden po drugim. Np. możemy połączyć kilka video w jedno.</li>
</ul>
<p>Należy pamiętać że wszystkie ustawienia Layoutu opisane wcześniej, tyczą się również podanych tutaj <em>MediaElement</em>&#8216;ów (jeśli jest taka możliwość, bo wiadomo że nie przeskalujemy odtwarzanej mp3 do wielkości kontenera). A właśnie. wyświetlając kilka różnych typów <em>MediaElement</em>&#8216;ów możemy natrafić na taki problem. Chcemy wiedzieć tylko na podstawie <em>MediaElement</em>&#8216;u jakie jego cechy są dostępne (Np. odtwarzanie/pauzowanie lub przewijanie)</p>
<h2>Traits</h2>
<p>Najwyższy czas na koncepcję <em><strong>Traits.</strong></em> Są to cechy danego elementu opisujące co on może robić. Mamy do nich łatwy dostęp przez serię właściwości <em>MediaElement</em>&#8216;u. Oto kilka z nich: <em>canPlay, canPause, canSeek</em> <em>oraz canLoad.</em> Jeśli chcemy śledzić jak się one zmieniają i reagować na te zmiany (np aby wyłączyć elementy interfejsu niedostępne dla aktualnego elementu. Wystarczy dodać eventListenery do <em>mediaPlayer</em>&#8216;a. Oto kod:</p>
<pre class="brush: as3; title: ;">
mediaPlayer.addEventListener(MediaPlayerCapabilityChangeEvent.CAN_PLAY_CHANGE, onCanPlayChange);
mediaPlayer.addEventListener(MediaPlayerCapabilityChangeEvent.CAN_SEEK_CHANGE, onCanSeekChange);

private function onCanPlayChange(e:MediaPlayerCapabilityChangeEvent):void
{
    playPauseBtn.enabled = e.enabled
    stopBtn.enabled = e.enabled
}

private function onCanSeekChange(e:MediaPlayerCapabilityChangeEvent):void
{
    progressBar.enabled = e.enabled
}
</pre>
<p>W ten sposób mamy pewność że każde odtwarzane medium ma poprawne dostępne kontrolki.</p>
<h2>Źródła</h2>
<p>Cały projekt nie wymaga posiadania Adobe Flash Professional CS4 ani żadnego innego. Wystarczy Flex SDK. Należy pamietać, że targetem jest Flash Player 10 i takiego wymaga OSMF. Oczywiście można skompilować go we Flashu. Wystarczy podać pełną nazwę klasy w Document Class oraz pamiętać aby dodać pliki SWC do Publish Settings.</p>
<p>Cała przykładowa aplikacja jest objęta licencją <a href="http://creativecommons.org/licenses/MIT/" target="_blank">MIT</a>, więc możecie dowolnie z niej korzystać w dowolnym celu.</p>
<p><strong>Cała aplikacja (live): <a href="http://augpoznan.eu/wp-content/uploads/2010/03/osmf_sample.html" target="_blank">link</a>;<br />
Cała aplikacja (źródła): <a href="http://dl.dropbox.com/u/1333188/Example1.zip" target="_blank">link</a>;</strong><br />
OSMF: <a href="http://osmf.org/" target="_blank">osmf.org;<br />
</a>OSMF downloads: <a href="http://opensource.adobe.com/wiki/display/osmf/Downloads" target="_blank">link</a>;<br />
OSMF Language Reference: <a href="http://help.adobe.com/en_US/OSMF/1.0/AS3LR/" target="_blank">link</a>;</p>
<h2>Podsumowanie</h2>
<p>Open Source Media Framework jest genialną rzeczą, która zwalnia nas z ciągłego zmagania się z tymi samymi problemami, pozwalając zająć się tym co ważne przy tworzeniu media playerów. Przyjazne oraz intuicyjne API zachęca do głębszego zapoznania się z ogromnymi możliwościami OSMF. Według mnie naprawdę warto! Jeśli jest coś co chcielibyście zobaczyć w kolejnym artykule, znaleźliście jakieś nieścisłości, niepełne wyjaśnienie albo cokolwiek co was intryguje, zostawcie mi wiadomość w komentarzu. Wszelkie pomysły oraz uwagi mile widziane.</p>
<p>Pozdrawiam,<br />
Michał Wróblewski</p>
 
<br/> Praca: <div id='workit2002widget' class='workit2002widget' style='padding:0px!important;border: 1px solid!important;border-color:#bbbbbb!important;background-color:#ffffff!important;width:450px!important;text-decoration:none!important;' ><ul style="text-indent:0px!important;padding:0px 7px!important; margin-top:0px!important;margin:0px!important;"><li style='padding-left:0px!important; padding-right:0px!important; padding-top:3px!important; margin-left:0px!important; margin-right:0px!important; margin-bottom:0px!important; list-style-type:none!important; text-indent:0px!important; font-family:Arial!important;padding-bottom:2px;line-height:9px!important;margin-top:0px!important;'><span style='font-weight:normal!important;text-decoration:none;color:#777777!important;font-family: Arial!important;text-decoration:none!important;font-size:9px;!important'><a style='border:0px; font-family: Arial!important;text-decoration:none;color:inherit;' rel='external' href='http://workit.pl/api_post/222O571334650'>oferty pracy WorkIT.pl</a></span></li><li style='padding-left:0px!important; padding-right:0px!important; padding-top:3px!important; margin-left:0px!important; margin-right:0px!important; margin-bottom:0px!important; list-style-type:none!important; text-indent:0px!important; font-family:Arial!important;padding-bottom:0px;line-height:15px!important;margin-top:0px!important;'><a style='border:0px; text-decoration:none;font-weight:normal!important;color:#777777!important;font-family:Arial!important;;font-size:12px!important;' rel='external' href='http://workit.pl/job/608/programista-php-wroclaw-at-triginita-ltd/222O571334650'><span style='text-decoration:none;font-weight:bold!important;color:#2676c9!important;font-family: Arial!important;text-decoration:none!important;;font-size:12px!important;'>programista php Wroclaw</span>, Dolnoslaskie, Triginita Ltd (etat od 3500 do 8000 zl)</a></li><li style='padding-left:0px!important; padding-right:0px!important; padding-top:3px!important; margin-left:0px!important; margin-right:0px!important; margin-bottom:0px!important; list-style-type:none!important; text-indent:0px!important; font-family:Arial!important;padding-bottom:0px;line-height:15px!important;margin-top:0px!important;'><a style='border:0px; text-decoration:none;font-weight:normal!important;color:#777777!important;font-family:Arial!important;;font-size:12px!important;' rel='external' href='http://workit.pl/job/607/webmaster-wordpress-at-centrum-rejestracji-oprogramowania/222O571334650'><span style='text-decoration:none;font-weight:bold!important;color:#2676c9!important;font-family: Arial!important;text-decoration:none!important;;font-size:12px!important;'>Webmaster Wordpress</span>, Wszedzie, Centrum Rejestracji Oprogramowania (etat)</a></li></ul><ul style="text-indent:0px!important;padding:0px 7px!important; list-style:none!important;margin-bottom:0px!important;margin-top:5px!important;margin:0px!important;"><li style='padding-left:0px!important; padding-right:0px!important; padding-top:3px!important; margin-left:0px!important; margin-right:0px!important; margin-bottom:0px!important; list-style-type:none!important; text-indent:0px!important; font-family:Arial!important;padding-bottom:4px;line-height:9px!important;margin:0px!important;margin-top:2px!important;'><span style='font-weight:normal!important;text-decoration:none;color:#777777!important;font-family: Arial!important;text-decoration:none!important;font-size:9px;!important;'>Inne: </span><a style='font-weight:normal!important;text-decoration:none;color:#777777!important;font-family: Arial!important;text-decoration:none!important;font-size:9px;!important;border:0px; ' rel='external' href='http://workit.pl/api_post/222O571334650/programista php wroclaw'>programista php wroclaw</a>, <a style='font-weight:normal!important;text-decoration:none;color:#777777!important;font-family: Arial!important;text-decoration:none!important;font-size:9px;!important;border:0px; ' rel='external' href='http://workit.pl/api_post/222O571334650/seo'>seo</a>, <a style='font-weight:normal!important;text-decoration:none;color:#777777!important;font-family: Arial!important;text-decoration:none!important;font-size:9px;!important;border:0px; ' rel='external' href='http://workit.pl/api_post/222O571334650/webmasetr'>webmasetr</a>, <a style='font-weight:normal!important;text-decoration:none;color:#777777!important;font-family: Arial!important;text-decoration:none!important;font-size:9px;!important;border:0px; ' rel='external' href='http://workit.pl/api_post/222O571334650/wordpress'>wordpress</a></li></ul></div><script src='http://www.google-analytics.com/urchin.js' type='text/javascript'></script><script type='text/javascript'>_uacct = 'UA-391107-15';urchinTracker();</script><script type='text/javascript' src='http://workit.pl/js/api.js'></script>]]></content:encoded>
			<wfw:commentRss>http://augpoznan.eu/wprowadzenie-do-osmf/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Wprowadzenie do Adobe Flash Catalyst</title>
		<link>http://augpoznan.eu/flashcatalyst-wprowadzenie/</link>
		<comments>http://augpoznan.eu/flashcatalyst-wprowadzenie/#comments</comments>
		<pubDate>Tue, 11 Aug 2009 08:51:44 +0000</pubDate>
		<dc:creator>wrobel</dc:creator>
				<category><![CDATA[Tutoriale]]></category>

		<guid isPermaLink="false">http://augpoznan.eu/?p=70</guid>
		<description><![CDATA[
Wprowadzenie
Adobe® Flash® Catalyst™ jest nowym narzędziem do szybkiego tworzenia interfejsów użytkownika bez potrzeby kodowania. Potrafi zamienić grafikę zaprojektowaną w jednym z popularnych narzędzi Adobe w aplikację z działającym interfejsem użytkownika, gotową do dalszej obróbki w Adobe® Flash® Builder™ 4.

Projektowanie


Pierwszą rzeczą jaką trzeba zrobić zanim użyjemy nowego narzędzia od Adobe jest zaprojektowanie wyglądu programu. Mamy kilka [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align:center;"><img class="aligncenter size-full wp-image-94" style="border: 0 initial initial;" title="FC_intro_title" src="http://flexibleair.wordpress.com/files/2009/08/fc_intro_title.png" alt="FC_intro_title" width="480" height="120" /></p>
<h1 style="text-align:left;">Wprowadzenie</h1>
<p><strong>Adobe® Flash® Catalyst™ jest nowym narzędziem do szybkiego tworzenia interfejsów użytkownika bez potrzeby kodowania. Potrafi zamienić grafikę zaprojektowaną w jednym z popularnych narzędzi Adobe w aplikację z działającym interfejsem użytkownika, gotową do dalszej obróbki w Adobe® Flash® Builder™ 4.</strong></p>
<p><strong><span id="more-70"></span></strong></p>
<h1>Projektowanie</h1>
<p><strong><img class="size-full wp-image-71 alignnone" title="allTools" src="http://flexibleair.wordpress.com/files/2009/08/alltools.jpg" alt="allTools" width="360" height="260" /><br />
</strong></p>
<p>Pierwszą rzeczą jaką trzeba zrobić zanim użyjemy nowego narzędzia od Adobe jest zaprojektowanie wyglądu programu. Mamy kilka opcji do wyboru:</p>
<ul>
<li>Adobe Photoshop</li>
<li>Adobe Illustrator</li>
<li>Adobe Fireworks</li>
</ul>
<p><strong><img class="size-full wp-image-84 alignnone" title="PSicon" src="http://flexibleair.wordpress.com/files/2009/08/psicon.png" alt="PSicon" width="128" height="128" /></strong></p>
<p>Na początku spróbowałem zrobić to w Photoshopie. Po utworzeniu wszystkich efektów, cieniowania itp oraz wyeksportowaniu tego do Flash Catalyst, okazało się, że nowe filtry warstwowe wprowadzone w PS CS4 są w ogóle pomijane, wszystkie elementy wektorowe są rastrowane. Generalnie mówiąc &#8211; porażka. Radzę nie używać tej opcji do projektowania swoich aplikacji, chyba że chce mieć wszystko w nieskalowanych PNG (domyślacie się jak wygląda skalowany PNG). Niech Photoshop pozostanie do projektowania grafiki rastrowej.</p>
<p><strong><img class="alignnone size-full wp-image-70" title="AIicon" src="http://flexibleair.wordpress.com/files/2009/08/aiicon.png" alt="AIicon" width="128" height="128" /></strong></p>
<p>Z tego powodu musiałem przenieść się do Illustratora. Nie używałem go wcześniej za często, więc zajęło mi to trochę więcej czasu. W końcu otrzymałem identyczny efekt jak w Photoshopie. Plik .ai przeniosłem do Flash Catalyst. Byłem zdumiony. Po pierwsze efekt, aplikacja wygląda tutaj identycznie jak w Illustratorze.  Po drugie, w końcu mam wszystkie obiekty w wektorach, na których łatwo możemy robić animacje przejścia i skalowania. Po trzecie wynikowy plik nie waży już 2MB tylko 200kb (było kilka zaimportowanych plików PNG &#8211; które pozostały dostępne w bibliotece.</p>
<p><strong><img class="alignnone size-full wp-image-78" title="FWicon" src="http://flexibleair.wordpress.com/files/2009/08/fwicon.png" alt="FWicon" width="128" height="128" /></strong></p>
<p>Pozostaje jeszcze jedna opcja &#8211; Adobe Fireworks. Ostatnio Adobe przygotowało spore uaktualnienie do wersji CS4. Dużo poprawek, co do ekspotowania do formatu FXG, o którym za chwilę. Został trochę pominięty w głównym oknie Flash Catalyst. Ma swoich przeciwników i zwolenników. Nie będę się wypowiadał na ten temat, bo po prostu nie znam możliwości Fireworks. Odsyłam za to do ostatniej części „<em>Dowiedz się więcej</em>”, do linku z oficjalną listą tutoriali na temat Adobe Flash Catalyst.</p>
<p>Jeszcze kilka uniwersalnych porad co do procesu projektowania. Co robić, aby jak najbardziej przyspieszyć i ułatwić sobie pracę w Flash Catalyst:</p>
<ul>
<li>Wszystkie elementy dziel na warstwy. Dotyczy to projektowania stanów przycisków, wszystkich elementów stron jakie mają się pojawić, jeśli mamy menu z różną zawartością. Przykładowe rozmieszczenie warstw możecie zobaczyć w plikach źródłowych i obrazku poniżej.</li>
<li>Nie używaj Photoshopa.</li>
<li>Dobrze przemyśl wszystkie elementy aplikacji. Mniej czasu zajmie Ci dodawanie nowych elementów w odpowiednie miejsca.</li>
</ul>
<p style="text-align:center;"><strong><img class="size-full wp-image-79 aligncenter" title="layers" src="http://flexibleair.wordpress.com/files/2009/08/layers.png" alt="layers" width="214" height="622" /></strong></p>
<p style="text-align:left;"><strong><strong>Adobe Flash Catalyst</strong></strong></p>
<p><strong><img class="alignnone size-full wp-image-77" title="FCicon" src="http://flexibleair.wordpress.com/files/2009/08/fcicon.png" alt="FCicon" width="128" height="128" /></strong></p>
<h2>Import</h2>
<p>Otrzymany plik z zaprojektowanym wyglądem aplikacji możemy zaimportować po uruchomieniu Flash Catalyst klikając, w naszym przypadku, na pozycję pliku Illustratora:</p>
<p><strong><img class="aligncenter size-full wp-image-68" title="1stScreen" src="http://flexibleair.wordpress.com/files/2009/08/1stscreen.jpg" alt="1stScreen" width="650" height="458" /><br />
</strong></p>
<p>Po zaimportowaniu pliku musimy sprawdzić czy wszystkie elementy są na swoim miejscu i czy wyglądają tak jak w oryginale. Jeśli wszystko jest OK, możemy zaczynać.</p>
<h2>Prototypowanie przycisków</h2>
<p>Najlepszą opcją dla przycisków jest przygotowanie wszystkich ich stanów tj. <em>Up</em>, <em>Over</em>, <em>Down</em> i ewentualnie <em>Disabled</em>. Następnie wrzucić je wszystkie do jednego folderu warstw i odpowiednio nazwać jak widać na rozkładzie warstw powyżej dla przycisku <em>Exit</em>. W takim przypadku utworzenie działającego przycisku sprowadza się do paru kliknięć.</p>
<ol>
<li>Zaznaczamy katalog z warstwami przycisków.<br />
<img class="aligncenter size-full wp-image-72" title="btnProt" src="http://flexibleair.wordpress.com/files/2009/08/btnprot.png" alt="btnProt" width="655" height="202" /></li>
<li>Z menu które się pojawia po zaznaczeniu jakiegoś obiektu (Window -&gt; HUD / F7) wybieramy <em>Convert Artwork to Component</em> i zaznaczamy opcję <em>Button.</em></li>
<li>Teraz musimy przypisać odpowiednie warstwy do wszystkich stanów przycisków.  Robimy to wybierając np. stan <em>Over</em> (u góry) i odznaczając widoczność warstw <em>Up</em> i <em>Down</em>. Robimy tak dla wszystkich stanów które przygotowaliśmy.<br />
<strong><img class="aligncenter size-full wp-image-73" title="btnStates" src="http://flexibleair.wordpress.com/files/2009/08/btnstates.png" alt="btnStates" width="655" height="214" /></strong></li>
<li>Przycisk gotowy!</li>
</ol>
<p>W przycisku możemy dodać jeszcze jeden element, tj. <em>Label</em>. Musimy do tego mieć przygotowane pole tekstowe lub dodać je bezpośrednio w Flash Catalyst z narzędzi oraz mieć je widoczne na wszystkich warstwach. Zaznaczamy i z menu HUD i <em>Convert Artwork to Button Part -&gt; Label.</em></p>
<p>Dodatkowym przyciskiem do oznaczenia (bez stanów) jest ten, na dwu warstwach w <em>RightPanel</em>: <em>expandBtn</em> i <em>expandBtnDots</em>.</p>
<p>Jeszcze raz zaznaczę, że <strong>dobry rozkład i nazwy warstw</strong> znacznie <strong>przyspieszą pracę</strong>, jak widać na tym przykładzie.</p>
<p>Praca z prototypowaniem pozostałych komponentów wygląda dość podobnie.</p>
<ul>
<li>Zaznacz katalog z warstwami</li>
<li>Skonwertuj do odpowiedniego komponentu</li>
<li>Wyznacz wymagane elementy i/lub stany.</li>
</ul>
<h2>Prototypowanie paska przewijania i listy.</h2>
<h3>Pasek przewijania</h3>
<p>Wszystko co znajduje się w katalogu <em>Left Panel</em> składa się na listę z tłem, element listy oraz pasek przewijania. Jeśli mamy zaprojektowany <em>scrollbar</em> musimy go najpierw skonwertować do komponentu <em>Vertical Scrollbar</em>:</p>
<ol>
<li>Możemy to zrobić menu HUD oraz menu kontekstowego (p-klik) katalogu warstw nazwanego <em>scrollBar</em> -&gt;<em> Convert Artwork to Component</em> -&gt;<em> Vertical Scrollbar</em>.<strong><img class="aligncenter size-full wp-image-85" title="scrConv" src="http://flexibleair.wordpress.com/files/2009/08/scrconv.png" alt="scrConv" width="363" height="306" /></strong></li>
<li>W tym momencie pojawi nam się problem, ponieważ Flash Catalyst nie wie jeszcze który element za co ma odpowiadać. Musimy nacisnąć <em>Edit Parts</em>. <strong><img class="aligncenter size-full wp-image-86" title="scrError" src="http://flexibleair.wordpress.com/files/2009/08/screrror.png" alt="scrError" width="405" height="170" /></strong></li>
<li>Najprościej jest, gdy każdy element jest dobrze nazwany. Wtedy z listy elementów edytowanego komponentu (tutaj: <em>VerticalScrollbar2</em>) zaznaczamy po kolei warstwy i określamy ich zadanie z menu HUD lub menu kontekstowego wybierając z listy <em>Convert Artwork to Vertical Scrollbar Part</em> odpowiednią część. Na obrazku mamy zaznaczony suwak (<em>thumb</em>) i wybieramy <em>Thumb</em> z listy.<strong><img class="aligncenter size-full wp-image-87" title="scrParts" src="http://flexibleair.wordpress.com/files/2009/08/scrparts.png" alt="scrParts" width="655" height="164" /></strong></li>
<li>Scrollbar gotowy! Możemy go przetestować tworząc plik .swf przez (Ctrl/Cmd)+Enter</li>
</ol>
<h3>Lista</h3>
<p>Suwak niby działa, ale nie jest jeszcze przypisany do żadnej listy. Żeby to zrobić musi on być wewnątrz komponentu <em>Data List</em>. Aby utworzyć komponent z w pełni działającą listą:</p>
<ol>
<li>Zaznaczamy cały katalog warstw</li>
<li>Konwertujemy go do <em>Data List</em> z menu HUD.</li>
<li>Znowu pojawi nam się błąd, więc <em>Edit Parts</em>.</li>
<li>Zaznaczamy katalog warstw <em>renderItem</em> i z menu HUD ustwiamy go jako <em>Repeated Item</em>.</li>
</ol>
<p>Teraz powinno nam się pojawić kilka takich samych elementów jak widać na obrazku.</p>
<p><strong><img class="aligncenter size-full wp-image-80" title="listReady" src="http://flexibleair.wordpress.com/files/2009/08/listready.png" alt="listReady" width="465" height="501" /></strong></p>
<h3>Element listy</h3>
<p>W zaznaczonym elemencie listy (po konwersji) możemy zmienić rodzaj rozłożenia elementów listy. Do wyboru z pola <em>Layout</em> jest <em>Vertical</em>, <em>Horizontal</em> oraz <em>Tile</em>. Dla każdego możemy określić rodzaj wyrównania oraz odległości pomiędzy elementami.</p>
<p>Kiedy dwukrotnie naciśniemy element listy możemy edytować jego stany <em>Normal</em>, <em>Hovered</em> (<em>Over</em>) i <em>Selected</em>. Domyślnie do każdego elementu dodawane jest tło aby utworzyć prosty efekt. Żeby to wyglądało trochę lepiej możemy rozszerzyć pole rozjaśnienia tła do szerokości listy po bokach, do góry do krawędzi listy i do dołu do linii rozdzielającej. Oczywiście wszystko zależy od tego, jak wygląda wasz powtarzany element listy.</p>
<p>Póki co w tej wersji (Beta 1) jest jeszcze trochę problemów, więc wszystkie elementy trzeba dokładnie sprawdzić i ewentualnie ułożyć, jeśli zmienią swój rozmiar lub położenie. Trzeba pamiętać żeby nie kopiować i wklejać ponieważ mogą powstać z tego problemy. Np. zmieniony rozmiar pola tekstowego, po ponownym ustawieniu pozostanie zmieniony tylko w jednym stanie. Gdy go skopiujemy, usuniemy stary tekst i wkleimy nowy to spójrz poniżej, co się stanie w panelu z warstwami. Tekst w jednym i drugim stanie będzie osobnym i nie powiązanym ze sobą elementem.</p>
<p>Rozwiązania są dwa:</p>
<ul>
<li>Skopiuj i wklej w tym samym miejscu element i usuń stary. Wtedy będziesz miał skopiowany element na wszystkich stanach ale nie widoczny. Zmień wszędzie gdzie trzeba na widoczny.</li>
<li>Druga opcja jest taka. Jeśli zmienisz rozmiar lub położenie jednego elementu, pamiętaj aby ustawić je we wszystkich stanach na takie same wartości.</li>
</ul>
<p><strong><img class="aligncenter size-full wp-image-74" title="copyPasteError" src="http://flexibleair.wordpress.com/files/2009/08/copypasteerror.png" alt="copyPasteError" width="227" height="175" /></strong></p>
<h3>Dane źródłowe do listy</h3>
<p>Po sprawdzeniu wszystkich elementów, dopasowaniu rozmiarów i pozostałych rzeczy, lista działa łącznie z paskiem przewijania. Co zrobić gdy mamy za mało elementów w liście, aby przetestować scrollbar lub chcemy je zmienić? Gdy wyjdziemy do głównego kontenera listy i jej zaznaczeniu możemy wybrać panel <em>Design-time Data</em>. Jest to miejsce do modyfikowania danych dla wybranej listy. Kliknij kilka razy <em>Add Row</em> i po sprawie.</p>
<p><strong><img class="aligncenter size-full wp-image-75" title="dummyData" src="http://flexibleair.wordpress.com/files/2009/08/dummydata.png" alt="dummyData" width="324" height="424" /></strong></p>
<p>W tym momencie wszystkie elementy zostały poprawnie skonwertowane i działają poprawnie, co można sprawdzić przez (Ctrl/Cmd) + Enter. To co dalej musimy zrobić to określić wszystkie główne stany naszej aplikacji oraz przejścia pomiędzy nimi.<strong> </strong></p>
<h2>Adobe Flash Catalyst &#8211; Stany oraz przejścia (States and Transitions)</h2>
<h3>Określenie stanów</h3>
<p>Wiadomo, że nasz program w każdym momencie nie będzie wyglądał tak samo, tzn. nie będzie miał takiego samego rozkładu elementów. Dla przykładu utworzymy 3 stany:</p>
<ul>
<li>Tylko lista z lewej strony</li>
<li>Lista z krótkim opisem</li>
<li>Lista z długim opisem</li>
</ul>
<p>Dla pewności umieściłem to na obrazku:</p>
<p style="text-align: center;"><strong><img class="aligncenter size-full wp-image-91" title="statesDesc" src="http://flexibleair.wordpress.com/files/2009/08/statesdesc.jpg" alt="statesDesc" width="458" height="344" /></strong></p>
<p>To co wystarczy zrobić, to zadeklarować i nazwać nowe stany oraz ustawić widoczność wszystkich elementów zgodnie z potrzebami. Korzystamy z opcji <em>Duplicate States</em>.</p>
<p>Utworzone stany powinny wyglądać tak:</p>
<p><strong><img class="aligncenter size-full wp-image-82" title="makeStates" src="http://flexibleair.wordpress.com/files/2009/08/makestates.png" alt="makeStates" width="563" height="140" /></strong></p>
<p>Dla każdego ze stanów musimy określić, które elementy chcemy w nim mieć. Zaznaczamy element i wygaszamy niepotrzebne elementy, tak jak na obrazku:</p>
<p><strong><img class="aligncenter size-full wp-image-90" title="showStateElements" src="http://flexibleair.wordpress.com/files/2009/08/showstateelements.png" alt="showStateElements" width="655" height="382" /></strong></p>
<p>Oto lista rzeczy jakie trzeba zrobić dla każdego stanu:</p>
<ol>
<li><strong>list: </strong>
<ol>
<li>Wyłącz widoczność katalogu warstw <em>RightPanel</em>.</li>
</ol>
</li>
<li><strong>shortDesc: </strong>
<ol>
<li>Wyłącz widoczność katalogu warstwy <em>RightPanel-&gt;extendedContent</em>.</li>
</ol>
</li>
<li><strong>longDesc: </strong>
<ol>
<li>Przesuń w pionie przycisk <em>expandBtn</em> do krawędzi listy po lewej.</li>
<li>Rozciągnij elementy z warstw <em>bg</em> i <em>bg_frame</em> do przycisku <em>expandBtn</em>.</li>
</ol>
</li>
</ol>
<p>Stan <em>longDesc</em> zrób tak jak na obrazku. Przy dużym przybliżeniu można to zrobić bardzo dokładnie, bo pozycje i rozmiary program zaokrągla do całych pikseli.</p>
<p><strong><img class="aligncenter size-full wp-image-81" title="longDesc" src="http://flexibleair.wordpress.com/files/2009/08/longdesc.png" alt="longDesc" width="416" height="490" /></strong></p>
<h3>Wprowadzenie gładkich przejść pomiędzy stanami</h3>
<p>Ta część będzie robiona z użyciem listwy czasowej (<em>timeline</em>). Lecz nie ma ona niczego wspólnego z tym co jest we Flashu. Służy ona do połączenia jednego stanu z drugim. „Warstwy” na tym timeline’ie oznaczają wszystkie możliwe przejścia pomiędzy stanami. Skoro mamy 3 stany to powinno być 6 przejsć. I tak jest:</p>
<p><strong><img class="aligncenter size-full wp-image-93" title="stateTransList" src="http://flexibleair.wordpress.com/files/2009/08/statetranslist.png" alt="stateTransList" width="655" height="191" /></strong></p>
<p>Najprostsze rozwiązanie teraz to dla każdego przejścia nacisnąć <em>Smooth Transition</em>. Domyśnie wszystkie ruchy, pojawianie się i znikanie będą trwały 0,5sec. O ile dla przejścia <em>list</em> -&gt; <em>shortDesc</em> jest to do zaakceptowania, to dla przejścia <em>shortDesc</em> -&gt; <em>longDesc</em> i odwrotnie już nie. Dlaczego? Użyjcie opcji <em>Smooth Transition</em> dla tych przejść i zobaczycie (użyj przycisku <em>play</em> na prawo od pola wyszukiwania w panelu <em>Timelines</em>.</p>
<p>Dla przejścia <em>shortDesc</em> -&gt; <em>longDesc</em> najpierw tło musi się rozszerzyć, a później dopiero pojawia się tekst. Dlatego pola <em>Fade In</em> można przesunąć w prawo do uzyskania odpowiedniego efektu, np. tak jak na obrazku poniżej:</p>
<p><strong><img class="aligncenter size-full wp-image-92" title="stateTransList2" src="http://flexibleair.wordpress.com/files/2009/08/statetranslist2.png" alt="stateTransList2" width="655" height="258" /></strong>Tak samo postępujemy dla przejścia w drugą stronę. W tym przykładzie nie będziemy używać przejść poza tymi:</p>
<ul>
<li><em>list</em> -&gt; <em>shortDesc</em></li>
<li><em>shortDesc</em> -&gt; <em>longDesc</em></li>
<li><em>longDesc</em> -&gt; <em>shortDesc</em></li>
</ul>
<h3>Przypisanie przejść do odpowiednich akcji.</h3>
<p>Mamy zadeklarowane wszystkie stany, przejścia pomiędzy nimi. Brakuje tylko określenia kiedy te przejścia mają być wykonywane. Załóżmy, że przejście:</p>
<ul>
<li><em>list</em> -&gt; <em>shortDesc</em> &#8211; wykonywane będzie przy zaznaczeniu elementu listy</li>
<li><em>shortDesc</em> -&gt; <em>longDesc </em>- kliknięciu przycisku <em>extendBtn</em></li>
<li><em>longDesc</em> -&gt; <em>shortDesc</em> &#8211; kliknięciu przycisku <em>extendBtn</em></li>
</ul>
<p>Więc zaznaczamy listę, i z menu HUD (F7) wybieramy <em>Custom Operations</em> -&gt; <em>On Selection Change</em>. Tutaj wybieramy rodzaj akcji. W naszym przypadku jest to przejście pomiędzy stanami (<em>Play transition to state</em>). Teraz musimy określić stan docelowy (pierwsze menu rozwijane) i w którym stanie ma być to przejście aktywne (drugie menu rozwijane). Robimy tak jak na obrazku:</p>
<p><strong><img class="aligncenter size-full wp-image-89" title="setTransAction" src="http://flexibleair.wordpress.com/files/2009/08/settransaction.png" alt="setTransAction" width="405" height="304" /></strong>Teraz wystarczy oznaczyć akcje na extendBtn. Do jednego przycisku przypiszemy dwa przejścia, na tej samej akcji, w ten sposób, aby działały inaczej, będąc w różnych stanach. Robimy to analogicznie jak wcześniej, doprowadzając do takiego efektu:</p>
<p><strong><img class="aligncenter size-full wp-image-88" title="setTransAction2" src="http://flexibleair.wordpress.com/files/2009/08/settransaction2.png" alt="setTransAction2" width="405" height="238" /></strong>Można przetestować działającą aplikację.</p>
<p><strong>Zakończenie</strong></p>
<p>W ten jakże prosty sposób udało nam się stworzyć z kawałka statycznej grafiki, działający interfejs programu z identycznym wyglądem jaki zaprojektowaliśmy wcześniej. Nigdy nie było to takie proste i szybkie. Wciąż jest sporo błędów do naprawienia oraz usprawnień do wprowadzenia.</p>
<p>Zapowiada się świetne narzędzie również dla tych, co nie będą używać tego dalej we Flash Builderze 4, lecz do szybkiego zamienienia projektu w coś działającego, jako demo dla klienta. Niemniej jednak, od dawna wielu oglądało, coraz to nowe zajawki związane z <em>Thermo</em>. Coś co w końcu połączy design z developementem (lub stworzy designerów &#8211; pomysł Lee Brimelow). Wersja Beta 1, którą możemy testować od jakiegoś czasu, okazała się świetnym narzędziem.</p>
<p>Oczywiście rozwiązanie to, nie mogło się obyć bez zmiany sposobu działania komponentów Flex’owych. Nowe komponenty Spark posiadają rozdzielenie pomiędzy wyglądem a sposobem działania, co powoduje, że są one jeszcze bardziej flexible <img src='http://augpoznan.eu/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Ciąg dalszy nastąpi… a w nim zobaczymy, co Flash Builder 4 zrobi z efektem działań tego tutorialu.</p>
<p><strong>Źródła:</strong></p>
<p>app1.ai &#8211; Plik Illustratora &#8211; design do importu<br />
app1.psd &#8211; Plik Photoshopa &#8211; do porównania<br />
app_start.fxg &#8211; Plik Flash Catalysta zaraz po zaimportowaniu<br />
app_end.fxg &#8211; Plik Flash Catalysta po ukończeniu</p>
<p>Wszystko tutaj: <a href="http://www.box.net/FlashCatalystTutorial">http://www.box.net/FlashCatalystTutorial</a></p>
<p><strong>Dowiedz się więcej:</strong></p>
<p><a href="http://labs.adobe.com/technologies/flashcatalyst/">http://labs.adobe.com/technologies/flashcatalyst/</a> &#8211; oficjalna strona na temat Adobe Flash Catalyst</p>
<p><a href="http://labs.adobe.com/technologies/flashcatalyst/tutorials/">http://labs.adobe.com/technologies/flashcatalyst/tutorials/</a> &#8211; oficjalna lista materiałów dla początkujących i zaawansowanych na temat Adobe Flash Catalyst</p>
<p><a href="http://www.gotoandlearn.com/">http://www.gotoandlearn.com/</a> &#8211; są tu znakomite 2 video-tutoriale w języku angielskim prowadzone przez Lee Brimelow, na których po części się wzorowałem.</p>
 
<br/> Praca: <div id='workit2002widget' class='workit2002widget' style='padding:0px!important;border: 1px solid!important;border-color:#bbbbbb!important;background-color:#ffffff!important;width:450px!important;text-decoration:none!important;' ><ul style="text-indent:0px!important;padding:0px 7px!important; margin-top:0px!important;margin:0px!important;"><li style='padding-left:0px!important; padding-right:0px!important; padding-top:3px!important; margin-left:0px!important; margin-right:0px!important; margin-bottom:0px!important; list-style-type:none!important; text-indent:0px!important; font-family:Arial!important;padding-bottom:2px;line-height:9px!important;margin-top:0px!important;'><span style='font-weight:normal!important;text-decoration:none;color:#777777!important;font-family: Arial!important;text-decoration:none!important;font-size:9px;!important'><a style='border:0px; font-family: Arial!important;text-decoration:none;color:inherit;' rel='external' href='http://workit.pl/api_post/222O571334650'>oferty pracy WorkIT.pl</a></span></li><li style='padding-left:0px!important; padding-right:0px!important; padding-top:3px!important; margin-left:0px!important; margin-right:0px!important; margin-bottom:0px!important; list-style-type:none!important; text-indent:0px!important; font-family:Arial!important;padding-bottom:0px;line-height:15px!important;margin-top:0px!important;'><a style='border:0px; text-decoration:none;font-weight:normal!important;color:#777777!important;font-family:Arial!important;;font-size:12px!important;' rel='external' href='http://workit.pl/job/518/programista-rubyonrails-at-netguru-sp-z-oo/222O571334650'><span style='text-decoration:none;font-weight:bold!important;color:#2676c9!important;font-family: Arial!important;text-decoration:none!important;;font-size:12px!important;'>Programista RubyOnRails</span>, Wielkopolskie, Netguru sp z o.o. (etat)</a></li><li style='padding-left:0px!important; padding-right:0px!important; padding-top:3px!important; margin-left:0px!important; margin-right:0px!important; margin-bottom:0px!important; list-style-type:none!important; text-indent:0px!important; font-family:Arial!important;padding-bottom:0px;line-height:15px!important;margin-top:0px!important;'><a style='border:0px; text-decoration:none;font-weight:normal!important;color:#777777!important;font-family:Arial!important;;font-size:12px!important;' rel='external' href='http://workit.pl/job/525/junior-konsultant-programista-w-dziale-sap-at-arvato-services-polska/222O571334650'><span style='text-decoration:none;font-weight:bold!important;color:#2676c9!important;font-family: Arial!important;text-decoration:none!important;;font-size:12px!important;'>Junior Konsultant / Programista w Dziale SAP</span>, Mazowieckie, arvato services Polska (etat)</a></li><li style='padding-left:0px!important; padding-right:0px!important; padding-top:3px!important; margin-left:0px!important; margin-right:0px!important; margin-bottom:0px!important; list-style-type:none!important; text-indent:0px!important; font-family:Arial!important;padding-bottom:0px;line-height:15px!important;margin-top:0px!important;'><a style='border:0px; text-decoration:none;font-weight:normal!important;color:#777777!important;font-family:Arial!important;;font-size:12px!important;' rel='external' href='http://workit.pl/job/520/projektant-projektantka-programista-net-programistka-net-at-it-advisor-sp-z-oo/222O571334650'><span style='text-decoration:none;font-weight:bold!important;color:#2676c9!important;font-family: Arial!important;text-decoration:none!important;;font-size:12px!important;'>Projektant, Projektantka / Programista .NET, Programistka .NET</span>, Wielkopolskie, IT Advisor Sp. z o.o. (etat)</a></li></ul><ul style="text-indent:0px!important;padding:0px 7px!important; list-style:none!important;margin-bottom:0px!important;margin-top:5px!important;margin:0px!important;"><li style='padding-left:0px!important; padding-right:0px!important; padding-top:3px!important; margin-left:0px!important; margin-right:0px!important; margin-bottom:0px!important; list-style-type:none!important; text-indent:0px!important; font-family:Arial!important;padding-bottom:4px;line-height:9px!important;margin:0px!important;margin-top:2px!important;'><span style='font-weight:normal!important;text-decoration:none;color:#777777!important;font-family: Arial!important;text-decoration:none!important;font-size:9px;!important;'>Inne: </span><a style='font-weight:normal!important;text-decoration:none;color:#777777!important;font-family: Arial!important;text-decoration:none!important;font-size:9px;!important;border:0px; ' rel='external' href='http://workit.pl/api_post/222O571334650/css'>css</a>, <a style='font-weight:normal!important;text-decoration:none;color:#777777!important;font-family: Arial!important;text-decoration:none!important;font-size:9px;!important;border:0px; ' rel='external' href='http://workit.pl/api_post/222O571334650/php'>php</a>, <a style='font-weight:normal!important;text-decoration:none;color:#777777!important;font-family: Arial!important;text-decoration:none!important;font-size:9px;!important;border:0px; ' rel='external' href='http://workit.pl/api_post/222O571334650/programista'>programista</a>, <a style='font-weight:normal!important;text-decoration:none;color:#777777!important;font-family: Arial!important;text-decoration:none!important;font-size:9px;!important;border:0px; ' rel='external' href='http://workit.pl/api_post/222O571334650/sql'>sql</a></li></ul></div><script src='http://www.google-analytics.com/urchin.js' type='text/javascript'></script><script type='text/javascript'>_uacct = 'UA-391107-15';urchinTracker();</script><script type='text/javascript' src='http://workit.pl/js/api.js'></script>]]></content:encoded>
			<wfw:commentRss>http://augpoznan.eu/flashcatalyst-wprowadzenie/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

