DevSecOps

18 fev, 2008

Alinhando MovieClips com Actionscript

Publicidade

Olá amigos, estou de volta. E desta vez, postando um código muito legal, que ainda não utilizei na prática, mas foi bem legal de desenvolver. É uma função que alinha os Movieclips com Actionscript.

Versão de AS: ActionScrip 2.0

Compatibilidade: Flash Player 6 ++

Dificuldade de produção: 4

Dificuldade de aplicação: 2

Como é um pouco complexo para descrever a criação da estrutura (não que seja difícil de fazer, e sim de explicar essas coisas básicas), baixe o arquivo aqui.

A função consiste nos códigos abaixo:

/*Align movieClip by Weverton Naves (tom.naves@bol.com.br) */
var mctoAlign:Array = new Array(mc1, mc2, mc3);
function redefineVars(){
mX = Number.POSITIVE_INFINITY;
//menor valor x
rX = Number.NEGATIVE_INFINITY;
// maior valor x
mY = Number.POSITIVE_INFINITY;
// maior valor y
rY = Number.NEGATIVE_INFINITY;
// menor valor y
}
redefineVars();
//coloca a opção de arraste
for (i=1; i<=mctoAlign.length; i++) {
var mc = mctoAlign[i-1];
mc.onPress = function() {
this.startDrag();
};
mc.onRelease = function() {
this.stopDrag();
};
}
function Align(type) {
redefineVars()
//------------------ PEGANDO VALORES
//pegando o menor valor y
for (i=0; i<mctoAlign.length; i++) {
if (mctoAlign[i]._y<mY) {
mY = mctoAlign[i]._y;
}
}
//pegando o maior valor y
for (i=0; i<mctoAlign.length; i++) {
if (mctoAlign[i]._y>rY) {
rY = mctoAlign[i]._y+mctoAlign[i]._height;
}
}
//pegando o menor valor x
for (i=0; i<mctoAlign.length; i++) {
if (mctoAlign[i]._x<mX) {
mX = mctoAlign[i]._x;
}
}
//pegando o maior valor x
for (i=0; i<mctoAlign.length; i++) {
if (mctoAlign[i]._x>rX) {
rX = mctoAlign[i]._x+mctoAlign[i]._width;
}
}
//trace("mY: "+mY+", rY: "+rY+", mX: "+mX+", rX: "+rX);
///---------------------------------------
switch (type) {
case "aC" :
//definindo a diferença na horizontal
var difH = rX-mX;
//colocando os mcs alinhados na horizontal
for (i=0; i<mctoAlign.length; i++) {
mctoAlign[i]._x = mX+(difH/2)-(mctoAlign[i]._width/2);
}
break;
case "aD" :
for (i=0; i<mctoAlign.length; i++) {
mctoAlign[i]._x = rX-mctoAlign[i]._width;
}
break;
case "aE" :
for (i=0; i<mctoAlign.length; i++) {
mctoAlign[i]._x = mX;
}
break;
case "aT" :
for (i=0; i<mctoAlign.length; i++) {
mctoAlign[i]._y = mY;
}
break;
case "aB" :
for (i=0; i<mctoAlign.length; i++) {
mctoAlign[i]._y = rY-mctoAlign[i]._height;
}
break;
case "aM" :
//definindo a diferença na vertical
var difV = rY-mY;
//colocando os mcs alinhados na horizontal
for (i=0; i<mctoAlign.length; i++) {
mctoAlign[i]._y = mY+(difV/2)-(mctoAlign[i]._height/2);
}
break;
case "dV" :
var difV = rY-mY;
var alturas = 0;
//pega a alturas dos mcs
for (a=0; a<mctoAlign.length; a++) {
alturas += mctoAlign[a]._height;
}
//espaço vago
var espVago = difV-alturas;
var espacamento = espVago/(mctoAlign.length-1);
var ref = mctoAlign[0]._y+mctoAlign[0]._height+espacamento;
//reposiciona
for (a=1; a<mctoAlign.length; a++) {
mctoAlign[a]._y = ref;
ref += mctoAlign[a]._height+espacamento;
}
break;
case "dH" :
var difH = rX-mX;
var alturas = 0;
//pega a alturas dos mcs
for (a=0; a<mctoAlign.length; a++) {
alturas += mctoAlign[a]._width;
}
//espaço vago
var espVago = difH-alturas;
var espacamento = espVago/(mctoAlign.length-1);
var ref = mctoAlign[0]._x+mctoAlign[0]._width+espacamento;
//reposiciona
for (a=1; a<mctoAlign.length; a++) {
mctoAlign[a]._x = ref;
ref += mctoAlign[a]._width+espacamento;
}
break;
default :
}
}

Como funciona a função?

Basicamente falando, inicialmente ela pega os menores e maiores valores de _x e _y dos MovieClips armazenados na matriz mctoAlign. Estes valores são os limites de espaço do alinhamento. Após conseguir estes valores, ele faz um swich com a variável type, que é o tipo de alinhamento passado pelo botão, e faz as ações necessárias.

Os botões chamam a função, passando o parâmetro type, que pode ter um dos seguintes valores:

aC: Alinhar ao centro

aD: Alinhar á direita

aE: Alinhar á esquerda

aT: Alinhar ao topo

aB: Alinhar á base

aM: Alinhar ao meio

dV: Distribuir espaçamento na vertical

dH: Distribuir espaçamento na horizontal

Os MovieClips a serem alinhados devem estar no array mctoAlign.

O código está todo comentado, para esclarecer algumas dúvidas.

NOTAS FINAIS

– Você pode mover os MovieClips, clicando e arrastando.

– Os espaçamentos, estão sendo feitos conforme os botões space da guia align.

– Você pode fazer o download dos arquivos clicando aqui.

– Visite o meu blog, ou acesse o fórum iMasters para postar alguma dúvida.

Abraços.