segunda-feira, 22 de junho de 2009

Meu flash =)

---------------------------------------->>>
Pode não ter ficado de forma "Uau, isto é um exemplar espetacular de flash!", mas me deu um trabalhão pra deixar tudo perfietinho :)

Para começar, vou lembrar que é tudo randômico (ou seja, aleatório), então às vezes pode aparecer coisas demais ou não aparecer quase nada (com chances muito pequenas), as coisas podem ser rápidas ou lentas, etc.

Começando, a folha eu fiz um desenho vetorizado (no flash todo desenho é vetorizado, para permitir maior versatilidade no projeto) por cima de uma foto, para ficar perfeita (BEM diferente do que acontece quando eu resolvo desenhar sozinho).
Depois eu fiz um extenso estudo sobre a geometria de uma estrela de 5 pontas.

É... fiz mesmo.

Primeiro nós temos no cetro da estrela, um pentágono de ponta-cabeça, cujo tamanho influencia se a estrela é mais "gordinha" ou "pontuda",
Depois temos um círculo em volta, concêntrico com o pentágono, que serve para fazer com que todas as pontas tenham o mesmo comprimento.

Não, a imagem não é macumba (Y)

Depois começou a parte mais chata e trabalhosa: os códigos.

Eu tinha que fazer surgir uma quantidade aleatória e infinita, num ritmo aleatório, de um certo objeto.
Eu fiz 6 objetos: Folhas com 3 tamanhos diferentes e Estrelas com 3 tamanhos também.

Eis o código na frame (ou quadro, que é base do sistema em que funciona o flash):
stop();
onLoad = function () {
i = 0;
};
onEnterFrame = function () {
i++;
if (random(75) == 1) {
duplicateMovieClip(_root.big_l, "big_l"+i, i);
}
if (random(60) == 2) {
duplicateMovieClip(_root.med_l, "med_l"+i, i);
}
if (random(50) == 3) {
duplicateMovieClip(_root.small_l, "small_l"+i, i);
}
if (random(75) == 4) {
duplicateMovieClip(_root.big, "big"+i, i);
}
if (random(50) == 6) {
duplicateMovieClip(_root.small, "small"+i, i);
}
if (random(60) == 5) {
duplicateMovieClip(_root.med, "med"+i, i);
}
};
Primeiro, estabeleci uma variável "i", para duplicar (ou fazer surgir) os MovieClips, que são objetos interativos, no caso, as estrelas e folhas. Cada MovieClip tem uma "instância", que é o nome pelo qual pode ser reconhecido nos códigos. No caso, estrela grande = big ; estrela média = med ; estrela pequena = small ; folha grande = big_l ; folha média = big_l ; folha pequena = small_l.

A estrutura básica:
if (random(60) == 5) {
duplicateMovieClip(_root.med, "med"+i, i);
}
If representa "SE". (random(60) == 5) gera números aleatórios a cada frame (nesse flash, são 20 frames por segundo, logo, 20 números por segundo) e se gerar o número 5... duplicateMovieClip(_root.med, "med"+i, i); que é "duplicar o MovieClip "med" (estrela média).

Agora vamos aos códigos que estão nos MovieClips:
onClipEvent (load) {
this._x = Stage.width+this._width;
this._y = random(Stage.height);
speed = (Math.random()+1)*3,5;
}
onClipEvent (enterFrame) {
if (this._x<-15) {
this.removeMovieClip();
};
this._x -= speed;
this._alpha = 85;
this._rotation += 5;
}
Bem... "onClipEvent (load) {" define a ação que vai acontecer quando o flash for iniciado, e as ações são as linhas até que se feche com um "}". Há 3 linhas. A primeira deifne que o objeto estará posicionado no eixo x (horizontal), numa posição equivalente ao comprimento da "prancheta" (onde ocorre tudo/o que você vê) mais o comprimento do objeto, para que ele não surga dentro da prancheta e possa cumprir a trejetória direita -> esquerda. A segunda diz que o objeto aparecerá em qualquer lugar do eixo y (vertical). A terceira define que a velocidade do objeto será aleatória, com um multiplicador de 3,5.
Esse multiplicador eu criei para diferenciar a velocidade dos objetos, para que as estrelas sejam mais rápidas que as folhas (multiplicador das estrelas maior que das folhas) e os objetos maiores sejam mais lentos do que os menores (multiplicador dos objs. grandes menor do que o dos objs. pequenos).

- "onClipEvent (enterFrame) {" -> Define a ação que vai ocorrer quando o objeto entrar no frame (ou seja, a hora que ele surgir):
-"if (this._x<-15) {" -> Se o objeto passar de 15 pixels do ponto "0" do eixo x (a borda esquerda da prancheta),
-"this.removeMovieClip();" -> O MovieClip será removido (por que se deixá-lo lá para sempre, o número de objetos se acumula, e flash irá travar... junto com o seu computador)
}; -> e
-"this._x -= speed;" -> define a direção da velocidade (previamente estabelecida como aleatória);
-"this._alpha = 85;" -> define a transparência: 85% visível (pois, caso não tenha notado, os objetos maiores são mais transparentes)
-"this._rotation += 5;" -> define que a cada frame o objeto rodará 5 graus (no caso, os objetos menores rodam mais rápido, ou seja, o valor de "_rotation" será maior.
} -> FIM :)


Bem... Se você leu até aqui, parabéns, campeão!
*Espero que pelo menos uma pessoa leia tudo :(*

3 comentários: