Assunto:
Desenvolvendo uma aplicação simples de partículas.
ActionScript:
Versão 3.0
Instruções Adicionais:
- Crie um novo Arquivo Flash AS3
- Primeiramente vamos criar um pequeno círculo que posteriormente será nossa particula.
- Transforme o círculo em um Movie Clip (F8), de nome “Bola”.
- Exclua o Movie Clip “Bola” do palco, repare que agora ele está apenas na biblioteca (Ctrl + L).
- Salve o arquivo como “particulas.fla”.
- Agora vamos criar a classe externa que irá controlar as particulas. Crie um novo Arquivo Actionscript (File -> Actionscript File “.as”) e insira o código abaixo:
- Repare que ao criarmos a classe, dizemos que ela vai herdar tudo que a classe Movie Clip contiver (extends MovieClip). Com isso, podemos acessar propriedades e métodos contidos no Movie Clip e nossa classe Particulas será uma filha da classe Movie Clip.
- Tenha o cuidado para salvar o arquivo na mesma pasta que o arquivo “particulas.fla”, salve com o mesmo nome descrito na classe (fique atento para as letras maiusculas e minusculas, isto também infuencia), no caso, “Particulas.as”.
Código da classe “Particulas.as”:
package{
import flash.display.*;
// Variáveis
public var velocidadeX
:Number;
public var velocidadeY
:Number;
// Metódo contrutor, inicializador da classe
public function Particulas(){
velocidadeX = 0;
velocidadeY = 0;
rotacao = 0;
}
// Função de atualizar as variáveis
public function atualizador(){
this.x+=velocidadeX;
this.y+=velocidadeY;
this.rotation+=rotacao;
}
}
}
Continuação das Instruções Adicionais:
- Abra o arquivo “particulas.fla”.
- Depois precisamos que o Movie Clip “Bola” é do tipo Particulas, para isso, abra a biblioteca pressionando <Ctrl+L> e clique com o botão direito do mouse sobre o Movie Clip “Bola”, selecione “Propriedades”. No painel das propriedades do símbolo deixe como na figura abaixo (clique na imagem para ampliar).

- Assim, toda as vezes que instanciarmos um Movie Clip do tipo bola ele já trará todas as funções e métodos da classe “Particulas.as”.
- Após isso, apenas nos resta colocar o código para criar estas partículas e aplicar as funções presentes na classe. Segue abaixo o código.
Código AS3:
import Particulas;
// Variaveis
var pTotal
:int=
1000;
//Total de partículas var aParticulas
:Array=
[];
// Registro de Eventos
stage.
addEventListener(Event.
ENTER_FRAME, _anima
);
//Funções
function _anima
(e
:Event):void {
if (aParticulas.length<pTotal) {
var bola_mc:Bola = new Bola();
addChild(bola_mc);
bola_mc.velocidadeX=
Math.
random()*10-5;
bola_mc.velocidadeY=
Math.
random()*10-5;
bola_mc.rotacao=
Math.
random()*90-10;
bola_mc.x=stage.stageWidth/2;
bola_mc.y=stage.stageHeight/2;
aParticulas.push(bola_mc);
}
for (var i
:int =
0; i
<aParticulas.
length; i
++) { aParticulas[i].atualizador();
}
}
DOWNLOAD:
Sistema de Partículas (36)
Assunto:
Alterando o ponteiro do mouse com perspectiva.
ActionScript:
Versão 2.0 e 3.0
Instruções Adicionais:
1. Inicie um novo arquivo.
2. Crie um objeto que será o novo ponteiro do mouse e converta-o em movieclip.
3. Instancie-o como cursor.
4. Caso estiver trabalhando com actionscript 2, cópie e cole o código AS2 no movieclip cursor, se não, crie uma nova layer com o nome action e cole o código do AS3.
5. Pronto, Ctrl+Enter.
Código AS2:
onClipEvent(load){
Mouse.hide();
}
onClipEvent(enterFrame){
_x = _root._xmouse;
_y = _root._ymouse;
_rotation = _root._xmouse/Stage.width*100;
}
Código AS3:
import flash.display.
Stage;
import flash.events.*;
// criando o event listener
addEventListener(Event.
ENTER_FRAME, fncOnEnterFrame
);
function fncOnEnterFrame
(evt
:Event):void { cursor.x= mouseX;
cursor.y= mouseY;
cursor.rotation = mouseX/stage.stageWidth*100;
}
DOWNLOAD:
Arquivos Fonte (32)
Assunto:
Centralizando movieclips atacados da biblioteca no Stage.
ActionScript:
Versão 2.0
Instruções Adicionais:
1. Inicie um novo arquivo.
2. Crie um quadrado e converta-o em movieclip.
3. Instancie-o na biblioteca como posicao.
4. Nomeie a primeira layer como action.
5. Precione F9 para acessar o console de actions e cole o código abaixo.
6. Pronto, Ctrl+Enter.
Código:
var palavra = "BUENO";
var posInicial = 0;
var comprimento = 0;
var distancia = 10;
for (i=1; i<=palavra.length; i++) {
attachMovie("posicao","mcPosicao"+i,i);
comprimento += _root["mcPosicao"+i]._width+distancia;
}
posInicial = (Stage.width-comprimento)/2;
for (j=1; j<=palavra.length; j++) {
_root["mcPosicao"+j]._x = j*(_root["mcPosicao"+j]._width+distancia)+(posInicial-(_root["mcPosicao"+j]._width/2)-5);
_root["mcPosicao"+j]._y = Stage.height/2;
}
DOWNLOAD:
Arquivo fonte (17)
Assunto:
Limitando o campo de entrada de texto.
ActionScript:
Versão 2.0
Instruções Adicionais:
1. Inicie um novo arquivo.
2. Crie um campo dinâmico no Stage e instancie-o com o nome desejado.
3. Redimencione este campo para o tamanho desejado e aplique as formatações de texto.
4. Crie uma nova layer e nomei-a como action.
5. Precione F9 para acessar o console de actions e cole o código abaixo substituindo o nome_do_campo.
6. Pronto, Ctrl+Enter.
Código:
// Ouvinte que é executado a cada notifição efetuada no campo em questão
nome_do_campo.onChanged = function() {
// Efetua uma conferência, que quando a rolagem do texto for maior do que 1 ele removerá o último carácter digitado
while (this.maxscroll>1) {
this.text = this.text.substr(0, this.text.length-1);
}
};
Assunto:
Metódo para criar gráficos dinâmicos utilizando dados obtidos de um XML.
ActionScript:
Versão 2.0
Código AS:
#include "mc_tween2.as"
import mx.effects.Tween;
corpo0._alpha = 0;
System.useCodepage = true;
var graf_xml:XML = new XML();
graf_xml.ignoreWhite = true;
graf_xml.onLoad = function(ok:Boolean) {
if (ok) {
trace("Arquivo XML encontrado.");
gerarGrafico(this.firstChild.childNodes);
} else {
trace("Arquivo XML não encontrado.");
}
};
graf_xml.load("grafico.xml");
function gerarGrafico(xmlNode) {
var len:Number = xmlNode.length;
var total:Number = 0;
var perc:Number = 0;
for (i=1; i<len; i++) {
this.corpo0.duplicateMovieClip("corpo"+i,getNextHighestDepth());
this.texto0.duplicateMovieClip("texto"+i,getNextHighestDepth());
}
for (a=0; a<len; a++) {
total += parseInt(xmlNode[a].childNodes[0].childNodes);
this["corpo"+a].valor = parseInt(xmlNode[a].childNodes[0].childNodes);
this["corpo"+a]._x = (this.corpo0._x)+(a*(this["corpo"+a]._width+20));
this["corpo"+a]._alpha = 0;
this["corpo"+a]._yscale = 0;
this["corpo"+a].id = a;
this["texto"+a]._x = this["corpo"+a]._x+(this["corpo"+a]._width/2)-(this["texto"+a]._width/2);
}
for (j=0; j<len; j++) {
perc = Math.round((this["corpo"+j].valor*100)/total);
this["corpo"+j].perc = perc;
this["corpo"+j].alphaTo(100,0.3);
this["corpo"+j].tween = new Tween(this["corpo"+j], 100, perc, 1500);
this["corpo"+j].enabled = false;
this["corpo"+j].onTweenUpdate = function(p) {
_root["texto"+this.id].s_txt.text = this.perc+"%";
if (this.perc<0) {
_root["texto"+this.id]._y = this._y+this._height+_root["texto"+this.id]._height;
} else {
_root["texto"+this.id]._y = this._y-this._height;
}
this._yscale = p;
};
this["corpo"+j].onTweenEnd = function(p) {
this.onTweenUpdate(p);
this.enabled = true;
};
this["corpo"+j]._color = new Color(this["corpo"+j]);
this["corpo"+j].onRollOver = function() {
this._color.setTransform({rb:204, gb:0, bb:0});
this.onRelease = function() {
titulo_txt.text = xmlNode[this.id].childNodes[1].childNodes;
valor_txt.text = "QTDE: "+xmlNode[this.id].childNodes[0].childNodes+" - PORCENTAGEM: "+this._yscale+"%";
desc_txt.text = xmlNode[this.id].childNodes[2].childNodes;
};
};
this["corpo"+j].onRollOut = this["corpo"+j].onReleaseOutside=function () {
this._color.setTransform({rb:0, gb:0, bb:0});
info_txt.removeTextField();
};
this["corpo"+j].tween.easingEquation = mx.transitions.easing.Elastic.easeOut;
}
}
Código XML:
<?xml version="1.0" encoding="utf-8"?>
<grafico>
<dado>
<valor>235</valor>
<titulo>TITULO1</titulo>
<desc>DESCRICAO1</desc>
</dado>
<dado>
<valor>150</valor>
<titulo>TITULO2</titulo>
<desc>DESCRICAO2</desc>
</dado>
<dado>
<valor>183</valor>
<titulo>TITULO3</titulo>
<desc>DESCRICAO3</desc>
</dado>
</grafico>
DOWNLOAD:
Arquivo fonte (36)
Assunto:
A classe Selection permite que você defina e controle o campo de texto no qual está localizado o ponto de inserção, ou seja, o campo que possui o foco. Os índices do intervalo de seleção são baseados em zero (por exemplo, a primeira posição é 0, a segunda é 1 e assim por diante).
Não há nenhuma função construtora para a classe Selection, pois só pode haver um campo focalizado por vez.
ActionScript:
Versão 2.0
Código:
//especifica a formatação da caixa de texto
formata = new TextFormat();
with (formata) {
//definição de fonte
font = "Verdana";
//atribuindo o estilo negrito
bold = true;
//atribuindo tamanho 13
size = 13;
//atribuindo cor preto
color = 0000000;
//incorporando caracteres
embedFonts = true;
}
//cria o campo TextField
this.createTextField("campo",1,100,100,200,20);
//determina o tipo como entrada (input)
campo.type = "input";
//determina a suavição de bordas para avançado
campo.antiAliasType = AntiAliasType.ADVANCED;
//ativa a borda do campo
campo.border = true;
//determina o máximo de caracteres permitido no campo
campo.maxChars = 15;
//toda vez que o campo (input) recebe um evento (teclado/mouse) ele aplica a formatação no mesmo.
campo.onChanged = function() {
this.setTextFormat(formata);
}
//cria uma variavel para armazenar a informação selecionada
var trecho:String;
var selecao = new Object();
selecao.onMouseUp = function() {
trecho = "";//limpa a váriavel que armazena o que foi selecionado
numInicial = Selection.getBeginIndex();//pega onde o texto selecionado inicia
numFinal = Selection.getEndIndex();//pega onde o texto selecionado termina
trecho = campo.text.substring(numInicial, numFinal);
trace(trecho);
}
Mouse.addListener(selecao);
Assunto:
Propriedade; em função de construtor, a propriedade prototype refere-se a um objeto que é o protótipo da classe construída. Cada instância da classe que é criada pela função de construtor herda todas as propriedades e métodos do objeto protótipo.
ActionScript:
Versão 2.0
Código:
Array.prototype.randomize = function() {
return this.sort(function (a, b) {
return (Math.floor(Math.random() * 2) == 0) ? 1 : -1;
});
};
myArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
trace(myArray.randomize());

A Maratona de Programação é um evento da Sociedade Brasileira de Computação que nasce das competições regionais classificatórias para as finais mundiais do concuso de programação ACM.
Ela se destina a alunos de cursos de graduação e início de pós-graduação na área de Computação e afins (Ciência da Computação, Engenharia de Computação, Sistemas de Informação, Matemática, etc). A competição promove nos alunos a criatividade, a capacidade de trabalho em equipe, a busca de novas soluções de software e a habilidade de resolver problemas sob pressão. De ano para ano temos observado que as instituições e principalmente as grandes empresas da área têm valorizado os alunos que participam da Maratona.
Os times são compostos por três alunos, que tentarão resolver durante 5 horas o maior número possível dos 8 ou mais problemas que são entregues no início da competição. Estes alunos têm à sua disposição apenas um computador e material impresso (livros, listagens, manuais) para vencer a batalha contra o relógio e os problemas propostos.
Os competidores do time devem colaborar para descobrir os problemas mais fáceis, projetar os testes, e construir as soluções que sejam aprovadas pelos juízes da competição. Alguns problemas requerem apenas compreensão, outros conhecimento de técnicas mais sofisticadas, e alguns podem ser realmente muito difíceis de serem resolvidos.
O julgamento é estrito. No início da competição os competidores recebem os problemas que devem ser resolvidos. Nos enunciados dos problemas constam exemplos dos dados dos problemas, mas eles não têm acesso às instâncias testadas pelos juízes. A cada submissão incorreta de um problema (ou seja, que deu resposta incorreta a uma das instâncias dos juízes) é atribuída uma penalidade de tempo. O time que conseguir resolver o maior número de problemas (no menor tempo acumulado com as penalidades, caso haja empate) é declarado o vencedor.
Para mais infomações acesse: Maratona de Programação
Assunto:
Efeito FadeIn e FadeOut da classe TransitionManager.
ActionScript:
Versão 3.0
Código:
import fl.transitions.*;
import fl.transitions.easing.*;
bt.graphics.beginFill(0x000000);
bt.graphics.drawRect(-25, -25, 50, 50);
bt.graphics.endFill();
bt.x=stage.stageWidth/2;
bt.y=stage.stageHeight/2;
addChild(bt);
mc.graphics.beginFill(0xFF0000);
mc.graphics.drawRect(-100, -100, 200, 200);
mc.graphics.endFill();
mc.x=stage.stageWidth/2;
mc.y=stage.stageHeight/2;
addChild(mc);
bt.
addEventListener(MouseEvent.
CLICK, mouseOverBox
);
if (clique==0) {
clique=1;
TransitionManager.start(mc, {type:Fade, direction:Transition.OUT, duration:3, easing:Strong.easeOut});
} else {
clique=0;
TransitionManager.start(mc, {type:Fade, direction:Transition.IN, duration:3, easing:Strong.easeOut});
}
}