Pra quem tem que trabalhar com aplicacoes multimidia, vira e mexe se debate com alguns desafios pra fazer em actionscript (as3).
Ha cerca de 3 meses, tenho dividido minha rotina diaria de trabalho entre aplicacoes multimidia e e-business.Com isso, tenho aprendido muita coisa… muita coisa mesmo.Sendo assim vou a partir de agora compartilhar com voces algumas de minhas pequenas, medias e grandes descobertas desta minha nova jornada profissional, e espero que com isso possa ajudar algum desenvolvedor de alguma forma.
Aqui vai uma pequena, essa classe em questao é pra controlar o posicionamento relativo de objetos em relacao a um objeto principal.Muito utilizado quando se tem que fazer zoom em uma imagem por exemplo, e esta imagem possui pontos que devem acompanhar e seguir na mesma posicao de acordo com o zoom ou movimento aplicado sobre a imagem (objeto principal).
Segue abaixo o código da classe controladora:
package com.confidential.components.utilities
{
import flash.events.Event;
import flash.events.MouseEvent;
import mx.core.UIComponent;
public class PositionRelative
{
private var _target:UIComponent;
private var _scaleXIni:Number;
private var _scaleYIni:Number;
private var _items:Array;
//Start position relative control
public function PositionRelative(target:UIComponent)
{
_target = target;
_scaleXIni = _target.scaleX;
_scaleYIni = _target.scaleY;
_target.addEventListener(Event.ENTER_FRAME, update);
_target.addEventListener(MouseEvent.MOUSE_DOWN, blockenterFrame);
_target.addEventListener(MouseEvent.MOUSE_UP, freeenterFrame);
_items = new Array();
}
//Add objects that will be controled
public function addItem(item:UIComponent):void
{
var reg:Object = new Object();
reg.item = item;
reg.x = item.x – _target.x;
reg.y = item.y – _target.y;
_items.push(reg);
}
//Update object position
public function update(e:*=null):void
{
var _scaleX:Number=1 + _target.scaleX – _scaleXIni;
var _scaleY:Number=1 + _target.scaleY – _scaleYIni;
var total:uint=_items.length;
var i:uint;
for (i=0; i < total; i++)
{
_items[i].item.x=Math.round(_target.x + (_items[i].x * _scaleX));
_items[i].item.y=Math.round(_target.y + (_items[i].y * _scaleY));
}
}
//Remove event enter_frame for user can moved objects mobiles
public function blockenterFrame(e:*=null):void
{
_target.removeEventListener(Event.ENTER_FRAME, update);
}
//Add event enter_frame back after move objects mobiles
public function freeenterFrame(e:*=null):void
{
_target.addEventListener(Event.ENTER_FRAME, update);
}
}
}
Feito isso depois para utiliza-la é só utilizar o seguinte código:
public var _positionRelative:PositionRelative;
_positionRelative = new PositionRelative(foto);
_positionRelative.addItem(_obj1);
_positionRelative.addItem(_obj2);
_positionRelative.addItem(_obj3);
Pronto, desta forma seus objetos vao ter sempre a mesma posicao do seu objeto principal, independente do zoom aplicado ou do movimento aplicado no objeto principal.
No próximo post vou mostrar a voces uma forma de aplicar a um objeto principal um zoom/movimento relativo, ou seja, voce tem uma imagem em tamanho normal e a mesma imagem em tamanho miniatura, e deseja que de acordo com o movimento do mouse sobre a miniatura, seja reproduzido o movimento/zoom relativo na imagem principal.
Abraco a todos!
P.S:A falta de acentos é por causa do layout do teclado.