Stratus service for developing end-to-end applications using RTMFP in Flash Player 10
January 5th, 2009
“There is a new ActionScript 3.0 API in Flash Player 10 to support RTMFP. Connecting to the Stratus service and creating end-to-end media streams are analogous to working with Flash Media Server. Please note that you must use ActionScript 3.0 with either Flash Professional CS4 or Flex Builder 3 targeting Flash Player 10 or AIR 1.5.”
Why use Stratus? hmm, well, Stratus is one sweet way to connect and trade data between users direct from Flash Player, eg. audio and video call or multi-player games. Like the AMFPHP, using Stratus you need first connect to service as show my code bellow:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | package { import flash.display.*; import flash.events.*; import flash.net.*; import flash.media.*; public class stratusSample extends MovieClip { private const StratusAddress:String = "rtmfp://stratus.adobe.com"; private const DeveloperKey:String = "YOUR_STRATUS_ID"; private var netConnection:NetConnection; private var sendStream:NetStream; private var recvStream:NetStream; public function stratusSample():void { netConnection = new NetConnection(); netConnection.addEventListener(NetStatusEvent.NET_STATUS, netConnectionHandler); netConnection.connect(StratusAddress + "/" + DeveloperKey); } private function netConnectionHandler(e:NetStatusEvent):void { trace("Net Status : " + e.info.code); } } } |
This will connect and show the status of connection, if was successfull or fail. To work you must use YOUR_STRATUS_ID that you will create in “labs.adobe.com/stratus”. I am working in one chat using Stratus and soon i ll publish source code here. Any question comment. Thanks for all.
Simple gallery class [AS3]: gallLoader
December 17th, 2008
Create one simple gallery can take a time that you havent. Well, a simple solution that i create was gallLoader Class, one simple gallery that load thumbs, position thumbs in lines and load large image. Simple to use:

Have two arrows in right and left side of thumb container, these arrow will move container to view all other images using one more class named slideClip. Now you need only import and create these class objects like code bellow:
import com.dLibs.slider.slideClip; import com.dLibs.photos.gallLoader; var minData:Array = ["galeria/001/001.jpg", ...]; var maxData:Array = ["galeria/001/g001.jpg", ...]; var gallPict:gallLoader; gallPict = new gallLoader(minData,maxData,gClip.bigImage,gClip.gImages,"gallThumb",4,2,gClip.LoadQuadAnim); var galSlider:slideClip; galSlider = new slideClip(gClip.gImages, gClip.gMask, gClip.gNext, gClip.gPrev);
Well, minData and maxData is an Array with thum and large images location. We import slideClip and gallLoader classes, the first will make slider with container and other classe will create the gallery.
First create gallPict link and gallLoader object, and this new gallLoader object need receive in order: thumb array, large images array, MovieClip instance of large image, container instance, class of the thumb clip in library, padding or distance of thumb clips, number of lines that will separated thumbs and loader instance. Uffa ehehhe so many instances but the result is so many speedly.
Too need create slideClip object and set the clip instances: container clip instance, mask intance ( mask of container ), next and prev clip instance. Using click event will move and show all container clip with your thumbs. See the Flash simple gallery in action here:
Bellow the slideClip and gallLoader classes to view and save.
slideClip.as
package com.dLibs.slider { import flash.display.*; import flash.events.*; import gs.TweenLite; public class slideClip { private var _contClip:MovieClip; private var _maskClip:MovieClip; private var _nextClip:MovieClip; private var _prevClip:MovieClip; private var _maxWidth:Number; private var _actWidth:Number; public function slideClip(contClip:MovieClip, maskClip:MovieClip, nextClip:MovieClip, prevClip:MovieClip) { /* To use this class var galSlider:slideClip = new slideClip(clip_Images, clip_Mask, clip_Next, clip_Prev); Clips that ll be slided, clip that mask the first, button to Next and to ultimate to Prev */ _contClip = contClip; _maskClip = maskClip; _nextClip = nextClip; _prevClip = prevClip; _nextClip.buttonMode = true; _prevClip.buttonMode = true; _maxWidth = _maskClip.width; _actWidth = _maskClip.x; slideInit(); } private function verifyWidth():void { if ( _contClip.width <= _maxWidth ) _nextClip.visible = _prevClip.visible = false; } private function slideInit():void { _nextClip.addEventListener(MouseEvent.CLICK, showNext); _prevClip.addEventListener(MouseEvent.CLICK, showPrev); verifyWidth(); } private function showNext(e:MouseEvent):void { if ( int(_actWidth) > int((_maskClip.x + _maxWidth ) - _contClip.width) ) { TweenLite.to(_contClip,.9, {x : _actWidth - _maxWidth}); _actWidth = _actWidth - _maxWidth; } } private function showPrev(e:MouseEvent):void { if ( int(_actWidth) < int(_maskClip.x) ) { TweenLite.to(_contClip,.9, {x : _actWidth + _maxWidth}); _actWidth = _actWidth + _maxWidth; } } } }
gallLoader.as
package com.dLibs.photos { import flash.display.*; import flash.events.*; import flash.utils.*; import flash.net.*; import gs.TweenLite; public class gallLoader { /* @ Variables ____________________________________________________*/ private var _minData :Array; private var _maxData :Array; private var _thmBox :Array; private var _bigPict :MovieClip; private var _smallPict :MovieClip; private var _thmClip :MovieClip; private var _thmMovie :MovieClip; private var _bigMovie :MovieClip; private var _loaderClip :MovieClip; private var _thumbClass :String; private var _loaderThumb :Loader; private var _loaderBig :Loader; private var _i :uint; private var _thumbPadding :uint; private var _thumbLines :uint; private var _thumbLineY :uint; private var _thumbLineX :uint; /* @ Constructor ____________________________________________________*/ public function gallLoader(minData:Array,maxData:Array,bigPicture:MovieClip,smallPictures:MovieClip,thumbClass:String,thumbPadding:uint=0, thumbLines:uint=1,loaderClip:MovieClip=null):void { _minData = minData; _maxData = maxData; _bigPict = bigPicture; _smallPict = smallPictures; _thumbClass = thumbClass; _thumbPadding = thumbPadding; _thumbLines = thumbLines; _loaderClip = loaderClip; _thmBox = new Array(); initGall(); }; /* @ init Function ____________________________________________________*/ private function initGall():void { if ( _loaderClip != null ) _loaderClip.visible = false; for ( _i = 0; _i < _minData.length; _i++ ) { _loaderThumb = new Loader(); _loaderThumb.x = _thumbPadding; _loaderThumb.y = _thumbPadding; _loaderThumb.load(new URLRequest(_minData[_i])); trace(_minData[_i] , _i); _thmClip = new ( getDefinitionByName(_thumbClass) as Class )(); _thmClip.addChild(_loaderThumb); _thmMovie = new MovieClip(); _thmMovie.x = ( _thmClip.width + 5 ) * _thumbLineX; _thmMovie.y = ( _thmClip.height + 5 ) * _thumbLineY; _thmMovie.id = _i; _thmMovie.buttonMode = true; _thmMovie.addEventListener(MouseEvent.CLICK, viewPicture); _thmBox.push(_thmMovie); _thmMovie.addChild(_thmClip); _smallPict.addChild(_thmMovie); if ( _thumbLineY + 1 < _thumbLines ) { _thumbLineY++; } else { _thumbLineY = 0; _thumbLineX++; } }; _thmBox[0].dispatchEvent(new MouseEvent(MouseEvent.CLICK)); }; /* @ init Function ____________________________________________________*/ private function viewPicture(e:MouseEvent):void { _loaderBig = new Loader(); _loaderBig.load(new URLRequest(_maxData[e.currentTarget.id])); _loaderBig.contentLoaderInfo.addEventListener(Event.COMPLETE, showLoadedBig); _loaderBig.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, showLoaderBig); trace(_maxData[e.currentTarget.id] , e.currentTarget.id); if ( _bigPict.numChildren > 1 ) _bigPict.removeChildAt(1); }; private function showLoaderBig(e:ProgressEvent):void { if ( _loaderClip != null ) _loaderClip.visible = true; }; private function showLoadedBig(e:Event):void { if ( _loaderClip != null ) _loaderClip.visible = false; _bigMovie = new MovieClip(); _bigMovie.alpha = 0; _bigMovie.addChild(_loaderBig); _bigPict.addChild(_bigMovie); TweenLite.to(_bigMovie,.4,{ alpha : 1 }); }; /* @ End ____________________________________________________*/ }; };
You can download the classes direct in repository:
http://asdatalibs.googlecode.com/svn/trunk/
Any questions comment it. Thanks.
XD
Sounds using AS3
November 12th, 2008
Hi, from now to ever ehehe i ll write my posts in English. Today I will talk about Sound Object, how to use for load music and play other music on sound complete. First step is create object Sound, like used in Actionscript 2:
var s:Sound = new Sound();
After this step need call a music, that will be played:
s.loadSound("music.mp3", true);
The second argument - true - is used to set load progress music, a fake streaming. Now we need set the functions that will be called when sound will be played. We can call a function on music start, other on music loaded and when music will be total played. Bellow the full script that execute function on music played:
var s:Sound = new Sound(new URLRequest("music.mp3"));
s.addEventListener(Event.COMPLETE, doLoadComplete);
var channel:SoundChannel = new SoundChannel();
channel = s.play();
channel.addEventListener(Event.SOUND_COMPLETE, doSoundComplete);
function doLoadComplete($evt:Event):void
{
trace("Song loaded.");
}
function doSoundComplete($evt:Event):void
{
trace("Song done.");
}
I will write a class to load, play, next and prev musics and soon show it here. Thanks for all and comment if you need.
Agora Flash CS4 tem help online
October 8th, 2008
Depois de muita gente começar usar o beta do Flash CS4 começaram os pedidos loucos por um help descente que pudesse mostrar como interagir com as novas ferramentas do programa, bones, 3D entre outros. A cara do help é como do LiveDocs mas com um layout ligeiramente alterado, para melhor claro.
Como diz o mestre Lee Brimelow, no ponto que estamos ninguem precisa mais de documentação do Actionscript 2. Vamo migrar minha gente. Abaixo tem o link do CS4 Help e do guia de programação em As3 para quem interessar.
Main help portal: http://help.adobe.com/en_US/Flash/10.0_Welcome/
AS3 Guide: http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/
Flash CS4 Feature Tour
September 25th, 2008
Affew, postado um poquinho das novidades do Flash CS4, depois da apresentação do CS4 e ver algumas das novidades do novo “brilhante” pacote Creative Suite da Adobe, como amante do Flash, fiquei louco louco louco depois de conhecer as novidades do Flash, principalmente o que diz respeito ao suporte 3D e Bones ( vivaaaaaaaaaaa bones ) nem acrediti quando vi clips ligados interagindo um com o outro.
Suporte a cores ainda é interligado com o Kuler (kuler.adobe.com) via o RSS do proprio aplicativo online, onde se pode selecionar sets competos ou pegar somente as cores que precisa naqueles momentos de pesquisa ou falta de inspiração hehe.
Ficou bem parecido com o a interface do After Effects, mas com uma interação e animação que jamais tinha visto antes, a qualidade das imagens mesmo em perspectiva ficou quase que perfeito. Vale a pena conferir o video postado no GotoAndLearn.com sobre as novidades do Flash CS4, muito bom mesmo.
Resize stage: stageWidth and stageHeight
September 24th, 2008
Olá, e como quase adoradores do Flash - e estudantes do AS3 - vamos falar um pouco do Resize do stage, ações quando o palco for dimensionado. Para fazer com que o Flash identifique o aumento ou diminuição do palco e execute uma determinada função deve-se criar o addEventListener abaixo:
stage.addEventListener(Event.RESIZE, resizeMe);
Assim podemos criar a função resizeMe que fara todas as mudanças de posição do palco a cada vez que ele identifique o resize. Para tanto a função deve receber o argumento event:Event para que seja executada pelo addEventListener, só que ai encontramos um pequeno problema: toda vez que o flash for carregado ele deve executar a função ao carregar e depois executar a cada resize para que nao carregue na posição errada e so seja corrigido as posições ao aumentar ou diminuir o palco.
Uma função ao ser chamada sem nenhum, com o event:Event, ela precisa enviar um arqumento do tipo Event o que não acontece quando executamos a função simplismente chamando-a pelo nome(), assim, um pequeno gato (heheh) criamos uma função sem o event normalmente:
function resizeAll():void { // code goes here };
essa poderá ser chamada pelo nome sem argumento no carregamento do frame normalmente:
resizeAll();
e ainda, completando cria-se uma função complementar, com o argumento event:Event onde será chamada pelo Listener do stage, dentro dessa função ela pede somente para executar a função resizeAll() normalmente, assim mesmo na inicialização ou no event.RESIZE será executada a mesma função, como segue no codigo completo abaixo:
stage.addEventListener(Event.RESIZE, resizeMe);
function resizeMe(event:Event):void { resizeAll(); };
function resizeAll():void
{
objeto.x = stageWidth - objeto.with;
objeto.y = stageHeight - objeto.height;
};
resizeAll();
Assim podemos posicionar objetos de acordo com os resize e ainda sempre que excutada a função podemos recuperar a largura e altura do stage usando a variável stageWidth e stageHeight, pegando o novo valor, ou seja da janela ampliada ou reduzida.
Espero que tenha ajudado, qualquer dúvida: comment me x)
Bee: WordPress based AIR
September 8th, 2008
Olá a todos, hoje lendo a documentação do AIR da Adobe encontrei nos diversos links um em especial com alguns programas feitos em Flash e Flex para AIR, mas dentre os inúmeros aplicativos inúteis encontrei o Bee.
Bee é um App feito para atualizar o blog do WordPress com suporte a imagens (também ia Flickr) com editor em HTML muito poderoso, completo. Seleção de categorias, salvar como Draft, publicar e muito mais. Preview abaixo:
Sou um usuário, a muito tempo, do Writer do pacote Live mas em questão de praticidade e facilidade de instalação e utilização acabo por me decidir em trocar, pelo menos por enquanto, para o Bee. Ainda nao da suporte a criar categorias diretamente do programa assim como o Writer mas isso, pelo menos para mim, é o de menos.
Link: Exemplos de projetos em AIR
Link: Download do Bee
Actionscript 3 Tips
September 8th, 2008
Olhando e rodando pela net procurando alguma coisa a mais sobre AS3 encontrei, quem diria, no site Kirupa.com (site que fiquei anos e anos ajudando no Forum e lendo todos todos todos os tutoriais ehehe) um post muito interessante do Senocular, adm do site senocular.com, um post muito interessante com mais de 100 dicas sobre como programar e organizar a programação em Actionscript 3.
Com toda certeza, e conhecendo os textos e tutoriais do senocular como conheço, vale a pena ler e estudar a partir dos estudos do cara. O link do post com diversas dicas segue abaixo:
Programando em Flash
September 1st, 2008
Existem milhares de vantagens para se aprender Actionscript 3, além de se manter no mercado que cada dia tem rookies - ganhando pouco e tomando o trampo dos experientes. Querendo ou não isso é uma realidade onde os medianos temem os novatos e por isso especializar é preciso, quanto mais PRO mais seguro está, claro.
No site DevNet da Adobe tem uma lista muito interessante de videos tuto para iniciantes na programação em AS3, realmente simples para se familiarizar com a nova linguagem e sintaxe do Actionscript3.
Link: Flash in a Flash - AS3
AMFPHP e AS3 para noobs
August 11th, 2008
Depois de passar um tempo longe dessa caceta de blog ( caceta no sentido carinhoso da palavra, ou se preferirem no feminio que não posso escrever ) tive dando uma estudada em AS3 bem a fundo e comecei a procurar um AMF (Action Message Format) para fazer comunicação do Flash com banco de dados e assim alimentar as aplicações de forma mais rápida sem aquele taaaaaaaanto de arquivos PHP para acessar banco e outros mil para enviar dados ao Flash.
Entre as formas pagas (Flash Media Server) e o grátis eu fiquei com o FREE claro. O danado em questão é um programa, gateway, que interpreta as classes colocadas dentro dele e retorna de forma fácil os dados para a aplicação, executando até coisas simples como um form de e-mail.
AMFPHP é um programa feito em PHP, como está no próprio nome, coisa idiota, com uma interface gráfica (Browser) criada no Flex onde podemos executar as aplicações sem necessariamente rodar a aplicação em Flash. Como eu já havia dito é grátis, basta acessar o site do AMFPHP e clicar em download par abaixar a última versão do programa, basta copiar para o server dentro do diretorio que preferir - por default:
Para visualizar a parte gráfica, o browser das aplicações, basta acessar o endereço:
Segue imagem (preview) do Browser abaixo:
Um exemplo simples para utilizar no AMFPHP é um form de email, onde nesse criamos um arquivo em PHP separado chamado de Email.php dentro dele criaremos a classe Email com a função _send como veremos no código abaixo:
<?php
class Email
{
/**
* Esse serviço ira enviar um formulario
* @retorno true ou false se enviado ou nao
*/
function send($to, $subject, $message){
return mail($to, $subject, $message);
}
}?>
Com essa classe dentro do servidor dentro da pasta do AMFPHP, aperto dentro do Browser o botão de Refresh para visualizar a nova Classe “Email” criada essa pode ser executada dentro do proprio Browser somente preenchendo os campos ou do Flash que segue o source abaixo. Bem fácil de usar e não instala nada no servidor, vale a pena testar.
Source em Flash (fla): Download
Espero que gostem e até breve.


