October 8th, 2009  | Tags:

Definition

Use to create your own playlist or just make your soundFX loops.

View CodeACTIONSCRIPT
import Zoo.SoundPlayer;
SoundPlayer.Init($url, { $vars });

Parameters

$url = The object to be defined to be a own url;

$vars = Here, we can get both loop, fadeIn, fadeOut, fadeInOut, volume, autoPlay and id.

loop = Here we can set the times that own sound will be played;

fadeIn, fadeOut, fadeInOut = Here we can set fades to own sound, the parameter of this property is “true”;

volume = This feature set own volume, this unit is measured between 0 and 1, if you want to set middle of volume uses 0.5;

autoPlay = Just to set if the sounds starts playing or no, the parameter of this one is “true”;

id = With own “id” we can control own sound, able to play and stop in specific sound.

We can control own sound by id’s that we set before;

View CodeACTIONSCRIPT
SoundPlayer.Control("sound1", {command:"play"});        
SoundPlayer.Control("all", {command:"stop"});

“sound1″ = This os own ID that we already set before; “all” = This os own property to stop all sounds; command = This is oun method to execute the action, we can put “play” and “stop” properties;
E.g.

View CodeACTIONSCRIPT
SoundPlayer.Init("myMusic.mp3", {loop:0, fadeInOut:true, volume:1, autoPlay:false, id:"sound1"});
// to play own id "sound1";
SoundPlayer.Control("sound1", {command:"play"});
// or to stop it
SoundPlayer.Control("all", {command:"stop"});

To download it, click here http://code.google.com/p/zoo-framework/downloads/list

October 2nd, 2009  | Tags:

Hi everyone, if you want to know more about this feature in Zoo ActionScript Framework, download the screencast to see the tutorial.

http://www.marceloduende.com.br/zoo/screencast/Aligner.wmv

Cheers

September 16th, 2009  | Tags:

Zoo ActionScript Framework was born to make your life easier in a shorter time of development.

Zoo is still a kid but, it has some interesting features such as Aligner, CharacterReplacer and new funcionality being created.

The objective of Zoo is to create a huge framework, integrating actionscript with some others programming languages like Java and PHP and also making things work in Flash by itself.

Zoo is free, I’ll NEVER charge anything for it. Is an open source code, all documented.

You can check it out in…
http://code.google.com/p/zoo-framework/

Cheers

June 27th, 2009  | Tags:

Dai pessoal.

Nos dias 06 e 07 de julho, vai ser realizado o Flex Mania, um evento com nomes carimbados do cenário. Cenário esse que vem crescendo e crescendo a cada dia. Eu como colaborador para que isso aconteça, estarei palestrando sobre desenvolvimento e estruturação de hotsites.
Irei falar desde o conceito e um motivo de porque ter um hotsite até a partes técnicas de estruturação de arquivos e melhor forma de se programar tal.
Então não custa nada dar uma averiguada no www.flexmania.com.br, conto com vocês pessoal. Abraço e até lá.

January 5th, 2009  | Tags:

Pois é, é isso mesmo, para quem não sabe, estou trocando Curitiba pelo Rio de Janeiro. Trocando de agência, e trocando de vida. Mudanças fazem bem, ainda mais se falando que 2008 não foi um dos melhores anos pra mim.

Mas só para deixar o registro, estou indo trabalhar na Seagulls Fly, agência renomada no meio do 3D no Brasil. Quem nunca viu o comercial em que Gisele Bundchen enchia o corpo de tatuagens vivas? Ou a fabulosa fábrica da Volkswagen? Pois é, vou me juntar a equipe dos caras, integrar a parte de Actionscript ao lado de Thalles Freitas, flash developer residente.

Vai ser ótimo para o desenvolvimento de técinas com patterns e poliformismo. Também como papervision 3d entre outras. Acredito que é o passo certo no momento certo.

Home Seagulls FlyPara quem não conhece a Seagulls vale a pena dar uma olhada no site da agência, é bem interessante.

Mas por hora é isso, prometo que em 2009 vou dar um pouco mais de atenção para o blog :)

Grande abraço, paz e ótimo 2009 para todos nós.

October 24th, 2008  | Tags: , ,

Dai pessoal,

Fiquei offline do blog por um tempo, muita correria, como acontece com todos hehe. Mas venho aqui novamente mostrar como se fazer um player de vídeo com netStream.
Não é nada cabuloso de outro mundo. Vamos resolver essa.

Primeiro baixe a classe TweenMax para transições e algumas animaçõeszinhas, dezipe o arquivo na pasta que vai conter o seu fla.

Crie uma pasta contents e dentro dela insira o seu flv com o nome 01.flv.

Agora crie um arquivo novo no flash com 322 x 246, 30 fps, com o nome de videoPlayer.fla . Crie o seu player da forma que achar mais bunito, mas seguindo esses padrões.

1 - Primeiro de tudo crie um MC pai com o instance name de “video_mc”, dentro dele que ficará todo nosso player, isso para facilitar o manuseio depois pra algum projeto.

2 - Botão play e pause = Ficam no mesmo botão, pause no primeiro frame, e play no segundo frame. Instance name de “play_mc”.

3 - Botão stop = Instance name de “stop_mc”.

4 - Botão volume =     Um botão para o setar o volume e o mute, primeiro frame dele o volume ok e no segundo o mute. Instance name de “volume_mc”.

5 - Botão SeekDrag = Cuidado aqui, o register point do video_mc tem que ficar exatamente no ponto de início do seekDrag, isso para o cálculo que vamos precisar executar depois. O seu instance name é “dragSeekBar_mc”.

6 - ProgressBar = Mesmo princípio do SeekDrag, seu instance name é “progressBar_mc”. Seu register point tem que ser alinhado a direita.

7 - Aqui já temos o primeiro macetinho, temos que criar uma máscara para fazer o progress “andar”, então crie duas camadas acima da camada do ProgressBar, na primeira use um shape exatamente no mesmo tamanho width do ProgressBar transforme-o em Mc e de o instance name de “maskProgress_mc”. Seu register point tem que ser alinhado a direita.

Na outra camada ponha o progreesBar em outra cor, diferenciando o que rodou e o que tem pra ser rodado, transforme em máscara e feito.

8 - Agora vamos adicionar nosso video source no stage, vá na library, bem em baixo, ao lado da lixeirinha, clique com o botão direito e vá até new Video, como name ponha “player_ns”. Adicione ele no stage, arrastando da library.

9 - E por útlimo o botão play do inicio do player. Uma camada por cima de tudo com o instance name de “startVideo_mc”, e dentro desse mc o botão play com o instance name de “play_mc”.

Ufa, fechamos a parte de layout. Quem disse que é facinho? hehe

Bom, se você seguiu todos os passos acima corretamente, é hora de irmos para o code, que inclusive já está bemmmm comentado, para isso abra um arquivo de actionscript novo e o nomeie de videoPlayer.as

View CodeACTIONSCRIPT
 
package 
{
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.net.NetConnection;
	import flash.net.NetStream;
	import gs.TweenMax;
	import gs.easing.*;
	import flash.events.MouseEvent;
	import flash.media.SoundTransform;
	import flash.geom.Rectangle;
	import flash.display.LoaderInfo;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
 
	/**
	* ...
	* @author Duende
	* @link http://www.marceloduende.com.br
	*/
	public class videoPlayer extends MovieClip
	{
		//*************************************************************
		//
		// !!!!!!!!!!!!!!!!!!!!!NetStream!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
		//
		//*************************************************************
 
		private var Duration:int = 15000;
		private var actualTime:Number;
		private var actualLength:Number;
		private var setVolume:Number = 1;
		private var rectArea:Rectangle = new Rectangle(0, 107, 186, 0);
		private var dragTime:Number;
		private var urlXML:URLRequest = new URLRequest();
		private var urlString:String  = new String();
		private var customClient:Object = {onMetaData:metaDataHandler};
		private var st:SoundTransform = new SoundTransform();
		private var netConnection:NetConnection = new NetConnection();
		private var netStream:NetStream;
 
 
		public function videoPlayer():void
		{
 
 
			urlString = "contents/01.flv";
			netConnection.connect(null);
			netStream = new NetStream(netConnection);
 
			video_mc.player_ns.attachNetStream(netStream);
			netStream.play(urlString);
			netStream.pause();
			netStream.seek(1);
			video_mc.play_mc.gotoAndStop(2);
 
			netStream.client = customClient;
			netStream.soundTransform = st;
			st.volume = 1;
 
			video_mc.play_mc.addEventListener(MouseEvent.MOUSE_DOWN, PauseVideo);
			video_mc.play_mc.buttonMode = true;
			video_mc.stop_mc.addEventListener(MouseEvent.MOUSE_DOWN, StopVideo);
			video_mc.stop_mc.buttonMode = true;
			video_mc.volume_mc.addEventListener(MouseEvent.MOUSE_DOWN, SetVolumeVideo);
			video_mc.volume_mc.buttonMode = true;
			video_mc.dragSeekBar_mc.addEventListener(MouseEvent.MOUSE_DOWN, DragSeek);
 
 
		}
 
		private function metaDataHandler(infoObject:Object):void {
			Duration = infoObject.duration;
			addEventListener(Event.ENTER_FRAME, DragSeekBar);
		}
 
 
		/**
		* ...
		* @usage Play/Pause Video
		*/
 
 
		private function PauseVideo(e:MouseEvent):void
		{
			if (video_mc.play_mc.currentFrame == 1) 
			{
				video_mc.play_mc.gotoAndStop(2);
				netStream.pause();
			} else {
 
				video_mc.play_mc.gotoAndStop(1);
				netStream.play(urlString);
				netStream.seek(actualTime);
			}
		}
 
 
		/**
		* ...
		* @usage Stop Video
		*/
 
 
		private function StopVideo(e:MouseEvent):void
		{
			video_mc.dragSeekBar_mc.removeEventListener(Event.ENTER_FRAME, DragSeekBar);
			netStream.pause();
			netStream.seek(0);
			video_mc.play_mc.gotoAndStop(2);
			video_mc.play_mc.addEventListener(MouseEvent.MOUSE_DOWN, PauseVideo);
 
		}
 
 
		/**
		* ...
		* @usage Set Volume Video
		*/
 
 
		private function SetVolumeVideo(e:MouseEvent):void
		{
			if (video_mc.volume_mc.currentFrame == 1) 
			{
				addEventListener(Event.ENTER_FRAME, FadeVolume);
				video_mc.volume_mc.gotoAndStop(2);
 
			} else {
				addEventListener(Event.ENTER_FRAME, FadeVolume);
				video_mc.volume_mc.gotoAndStop(1);
 
			}
		}
 
		private function FadeVolume(e:Event):void
		{
			if (video_mc.volume_mc.currentFrame == 2) 
			{
				setVolume -= 0.1;
				if (setVolume <= 0)
				{
					setVolume = 0;
					removeEventListener(Event.ENTER_FRAME, FadeVolume);
				}
 
			} else {
				setVolume += 0.1;
				if (setVolume >= 1)
				{
					setVolume = 1;
					removeEventListener(Event.ENTER_FRAME, FadeVolume);
				}
			}
			st.volume = setVolume;
			netStream.soundTransform = st;
		}
 
 
		/**
		* ...
		* @usage Drag Seek Bar
		*/
 
		private function DragSeekBar(e:Event):void
		{
			actualTime = netStream.time;
			video_mc.dragSeekBar_mc.x = actualTime / Duration * video_mc.progressBar_mc.width;
			video_mc.maskProgress_mc.scaleX = actualTime / Duration;
		}
 
 
 
		private function DragSeek(e:MouseEvent):void
		{
			netStream.pause();
			removeEventListener(Event.ENTER_FRAME, DragSeekBar);
			addEventListener(MouseEvent.MOUSE_UP, DragSeekOut);
			e.currentTarget.startDrag(false, rectArea);
		}
 
		private function DragSeekOut(e:MouseEvent):void
		{
			video_mc.play_mc.gotoAndStop(1);
			dragTime = int((video_mc.dragSeekBar_mc.x / video_mc.progressBar_mc.width) * Duration);
			e.currentTarget.stopDrag();
			removeEventListener(MouseEvent.MOUSE_UP, DragSeekOut);
			addEventListener(Event.ENTER_FRAME, DragSeekBar);
			netStream.play(urlString);
			netStream.seek(dragTime);
		}
	}
 
}

Ok, estamos com tudo em cima, agora é só definir o classPath, no flash na barra properties, insira videoPlayer e o flash vai achar automaticamente sua classe. Agora só compilar e correr pro abraço

Fico perdido? Dessa vez eu libero o fonte, pega aqui

July 10th, 2008  | Tags:

Buenas, hoje eu e meu companheiro de trabalho e amigo Paulo Araujo, tivemos uma esncrenca pra resolver, mas resolvemo bem, uma função que recebesse qualquer tipo de valor, pois então desenvolvemos a classe abaixo.

Não vou ensinar mais passo a passo como colocar a classe para rodar no flash né, nos posts anteriores tem como, caso haja alguma dúvida.

View CodeACTIONSCRIPT
package
{
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.display.Sprite;
	import flash.display.DisplayObject;
	/**
	* ...
	* @Marcelo Duende, Paulo Araujo Generic Function
	*/
	public class  genericFunction extends MovieClip
	{
		private var array:Array = [1, "lala"];
		private var number:Number = 1;
		private var string:String = "Duende";
 
		public function genericFunction()
		{
			Receive(array);//chamando a ação
		}
 
		private function Receive(geral:*)
		{
			var tipo = typeof geral;
			switch (tipo){
				case "object":
					if (geral is Array) {
						trace("Array");
						for(var i:int = 0; i<geral.length;i++){
							trace (typeof geral[i]);
						}
					}
					else if (geral is DisplayObject) {
						trace("DisplayObject");
						if (geral is Sprite) trace("Sprite");
						else if (geral is MovieClip) trace("MovieClip");
					}
					else trace("Outro tipo de Objeto");
				break;
				case "number":
					trace(tipo);
				break;
				case "string":
					trace(tipo);
				break;
			}
		}
	}
}

Abraço a todos

July 9th, 2008  | Tags:

Finalmente não preciso mais ouvir o maurivan nem ninguém me dizer… “Spiders do google passam por esse seu flash e nem da bola”.

Então SEO specialists, agora vocês podem contar com o flash em si para ajudar na indexação de conteúdo sem usar outras artimanhas, como os SWFObject e SWFAddress que eram como um “x” para spiders. A Adobe juntou-se ao Google e Yahoo para criar logo agora na próxima versão do Flash Player 10 arquivos swf totalmente compatíveis com spiders do Google e Yahoo.

Essa evolução na search engine optimization vai gerar um mercado ainda maior para o flash, não serão mais apenas sites institucionais e hotsites, com certeza teremos mais trabalho hehe, torço pra isso acontecer.

Abraço a todos

July 7th, 2008  | Tags:

Path Folower, é esse o nome que eu dou pra esse aplicativozinho, uma mini engine de games em as3. Só no seu fla, crie um mc que vai ser seu carrinho e o instancie de la_mc e ponha o class path como pathFolower, salve como pathFolower.fla.

Na mesma pasta crie um arquivo .as e salve-o como pathFolower.as e depois insira o seguinte no arquivo .as

View CodeACTIONSCRIPT
 
package
{
	//importando classes
	import flash.display.MovieClip;
	import flash.events.*;
	import caurina.transitions.Tweener;
	/**
	* ...
	* @marceloduende classezinha pra andar o carro
	*/
	public class  pathFolower extends MovieClip //iniciando a nossa classe
	{
		private var ang:Number;// angulo que vai receber os radianos
		private var length:int = 5; //o quanto ele vai no angulo ang
		private var angX:Number = 0; // valor da posição X
		private var angY:Number = 0; // valor da posição Y
		public function pathFolower()
		{
			stage.addEventListener(KeyboardEvent.KEY_DOWN, anda);//chamando a ação
		}
		private function anda(event:KeyboardEvent)
		{
			ang = la_mc.rotation * Math.PI / 180; //angulo em radianos
			angX = la_mc.x;
			angY = la_mc.y;
			switch (event.keyCode) //pegando valor do parâmetro
			{
				case 37: //botão esquerdo pressionado
					la_mc.rotation -= length;
				break;
				case 39: //botão direito pressionado
					la_mc.rotation += length;
				break;
				case 38: //botão para cima pressionado
					angX += Math.cos(ang) * 20;
					angY += Math.sin(ang) * 20;
					Tweener.addTween(la_mc, {x:angX, y:angY, time:1 } );
				break;
				case 40: //botão para baixo pressionado
					angX -= Math.cos(ang) * 20;
					angY -= Math.sin(ang) * 20;
					Tweener.addTween(la_mc, {x:angX, y:angY, time:1 } );
				break;
			}
		}
	}
}

Use as setas do teclado para mexer o robozinho :)

April 8th, 2008  | Tags:

Vamo lá, primeiro vamos organizar nossa pasta onde vai ficar o FLA. baixe essas classes aqui (serão necessárias para funcionar o arquivo). Agora dezipe os arquivos no diretório que você vai por o FLA.

Depois disso crie uma ou seis imagens com 200 x 200 pixels, eu deixei apenas uma imagem, mas é bom você fazer com 6 diferentes.

Ok, agora vamos ao flash, importe as imagens e transforme-as em MovieClip, na barra properties de cada MovieClip ponha o instance name de “face”, “face2″, “face3″, “face4″, “face5″ e “face6″, sem as aspas.

Ainda na barra de properties defina o blend como “Erase” para todos os MovieClips. e deixe-os no palco mesmo.

Agora vamos ao nosso código

View CodeACTIONSCRIPT
 
// importanto classes para o filme principal
import org.papervision3d.scenes.*;
import org.papervision3d.cameras.*;
import org.papervision3d.objects.*;
import org.papervision3d.objects.special.*;
import org.papervision3d.objects.primitives.*;
import org.papervision3d.materials.*;
import org.papervision3d.materials.special.*;
import org.papervision3d.materials.shaders.*;
import org.papervision3d.materials.utils.*;
import org.papervision3d.lights.*;
import org.papervision3d.render.*;
import org.papervision3d.view.*;
import org.papervision3d.events.*;
import org.papervision3d.core.utils.*;
import org.papervision3d.core.utils.virtualmouse.VirtualMouse;
 
// definindo nosso viewport
var viewport:Viewport3D = new Viewport3D(0, 0, true, true);
// adicionando o viewport
addChild(viewport);
viewport.buttonMode = true;
// definindo o renderizador
var renderer:BasicRenderEngine = new BasicRenderEngine();
// definindo o palco 3d
var scene:Scene3D = new Scene3D();
// definindo camera
var camera:Camera3D = new Camera3D();
camera.zoom = 11;
camera.focus = 100;
// definindo nosso movieclip para adicionar os MCS como material do cubo
var mam:MovieMaterial = new MovieMaterial(face);
mam.interactive = true;
mam.smooth = true;
mam.animated = true;
 
var mam2:MovieMaterial = new MovieMaterial(face2);
mam2.interactive = true;
mam2.smooth = true;
mam2.animated = true;
 
var mam3:MovieMaterial = new MovieMaterial(face3);
mam3.interactive = true;
mam3.smooth = true;
mam3.animated = true;
 
var mam4:MovieMaterial = new MovieMaterial(face4);
mam4.interactive = true;
mam4.smooth = true;
mam4.animated = true;
 
var mam5:MovieMaterial = new MovieMaterial(face5);
mam5.interactive = true;
mam5.smooth = true;
mam5.animated = true;
 
var mam6:MovieMaterial = new MovieMaterial(face6);
mam6.interactive = true;
mam6.smooth = true;
mam6.animated = true;
// pegando as vars definidas e jogando na lista de materiais do cubo
var cube:Cube = new Cube(new MaterialsList({front:mam, back:mam2, left:mam3, right:mam4,top:mam5, bottom:mam6}), 200, 200, 200, 10, 10, 10);
scene.addChild(cube);
// adicionando o evento loop para movimentação do quadrado
addEventListener(Event.ENTER_FRAME, loop);
// funcção do loop
function loop(e:Event):void
{
var xDist:Number = mouseX - stage.stageWidth * 0.5;
var yDist:Number = mouseY - stage.stageHeight * 0.5;
cube.rotationY += xDist * 0.05;
cube.rotationX += -yDist * 0.05;
renderer.renderScene(scene, camera, viewport);
}
// definindo clique para cada lado do quadrado
face.addEventListener(MouseEvent.CLICK, faceClick);
 
function faceClick(e:MouseEvent):void
{
navigateToURL(new URLRequest("http://www.marceloduende.com.br"));
}
 
face2.addEventListener(MouseEvent.CLICK, face2Click);
 
function face2Click(e:MouseEvent):void
{
navigateToURL(new URLRequest("http://www.marceloduende.com.br"));
}
 
face3.addEventListener(MouseEvent.CLICK, face3Click);
 
function face3Click(e:MouseEvent):void
{
navigateToURL(new URLRequest("http://www.marceloduende.com.br"));
}
 
face4.addEventListener(MouseEvent.CLICK, face4Click);
 
function face4Click(e:MouseEvent):void
{
navigateToURL(new URLRequest("http://www.marceloduende.com.br"));
}
 
face5.addEventListener(MouseEvent.CLICK, face5Click);
 
function face5Click(e:MouseEvent):void
{
navigateToURL(new URLRequest("http://www.marceloduende.com.br"));
}
 
face6.addEventListener(MouseEvent.CLICK, face6Click);
 
function face6Click(e:MouseEvent):void
{
navigateToURL(new URLRequest("http://www.marceloduende.com.br"));
}

Agora compile seu filme e brinque a vontade :)

Para baixar o arquivo acima clique aqui

TOP