ENG - LROCHA.com

Transcrição

ENG - LROCHA.com
· \(Vvvvv,eng.com.br
f
.--,
j
\
<'
Levei 3
TION SCRIPT
p a r t i cip a nte:
instruto r cer Lfi c a do:
có d i go da t;jrma.
realiza ção:
a
i
ENG
ACTION SCRIPT 3 - LEVEL 3
www.eng.c om.br
,"-. AUTH ORlZED
Adob.
,
Indice
Módulo 1 - Introdução
Pré-requisitos ................... .
ECMAScript . ......................
Sintaxe .....
Case Sensitivity .
Onde inserir seu código.
Boas Práticas
. '",:
Módulo 2 - Programação Orientada a Objetos
Oque é um obje to 7
Por que objetos 7
................ .
OOP x Procedura l (estruturada ) ......... .. ... .. .
Entendendo uma Classe
Propriedades ...
Escopo de variáveis ....
Métodos .
Construtor ..
Módu lo 3 - Operadores
wi th .....
protected ..
internal
super
continue
sWltch
case
default
break
7 [condltloral)
Módu lo 4 . Funçoes
Funções acessadas em pacotes
Funções globais
Funções an lnhi)dns
Funções err nível de arquIvo
Funções recurs ivas
Módulo
.... ....._....... .. 02
...... 02
.. ...... 02
....... 03
. ....... 04
........ 04
....... !E
... !E
...... 07
...... 07
.. 08
. ...... 08
..... 08
... CE
.... 12
.............. 13
.... 13
14
14
15
1J
15
16
16
18
19
20
.20
20
Disparando um Evento
Acessando o obleto via proprredade target
Acessando oobjelo viapropriedade current Target
Custom Event
Estendendo uma classe de evento
Módulo 6 - Classe Shape
Objero Triangulo
Objeto Circulo
Módulo 7 - Classe arguments
arguments lengtll
arguments callee
Modulo 8 . Construrndo uma Classe Abstrata
Classes abstratas e concretas
Conceito
Exemplo
23
24
.. Z5
27
31
32
34
34
ENG
Módulo 9· Polimorfismo
Conceito ..
Exemplo
Módulo 10 . Classe XMl e XMlDocument
Objeto XML
Lendo um XML externo
40
40
42
az
Módulo 11 . Classe Animator
Convertendo ammação de timellne para XMl
Classe Anirrator e Classe MotlonEvent
47
48
Módulo 12 . Animação com ActionScr lpt
Programando uma Animação
Ammação baseada na frame rate
Alterando a frame rate
Animação baseada em tempo
Conclusão
52
52
53
54
56
Módulo 13 . Detecçào de Collsao
Detecçào de cOlisão baseada num pont o
Detecção de coli são bôseada nLm obleto
58
59
Módulo 14 . Manipulando o Tec lado
Clas se Keyboard
Classe KeyboardEvent
De tectando teclas pressionadas simultaneamente
Módulo 15 . Exibindo Data e Hora
Trazendo data e hora do servidor .
. .... .... ... .
Retornandodados do ob!eto Dateseparadamente .
Recebendo o nome do mês edo dia da semana .
Convertendo entre Otvi YHr\!:SM e Epoch Milliseconds .
Módulo 16· Criando um Cursor de Mouse
Aplicando máscara a um obleto
Exibindo e escondendo ocursor de mouse ..
Criando um cursor personalizado .
Módulo 17 . Util izando Filtros
Criando e aplicando Filtros
Aplicando Filtro a um DisplayObject .
Removendo um Filtro de um DIsplayObject.
Classe BlurFilter .
Classe DropShadowFilter .
Classe ColorMatrixFi lter ..
Módulo 18· Aplicando Fullscreen
Alinhando oconteúdo do stage ..
Alterando a exibição do stage .
Definindo a Qualidade de exi bição do SVVF
Retornando o tamanho do stage
Aplicando FullScreen ao stage ..
Módulo 19 . Acessando a Impressora
Imprimindo como um VelOr ou Bitmap .. .
Escolhendo entre impressão Horizontal ou Verti cal ..
Detectando a possibilidade de Impressão .
Imprimindo uma página ... ............. ......
67
62
.. 53
65
E6
. .67
69
. 71
71
... 72
.. 7S
76
.. 76
76
77
.. 78
.80
.80
.. 81
...... ..... ..82
... .. .82
............ 88
.... 88
..89
... 89
EI\JG
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _A
__
C_T_I_O_N
____
S C_RI_p_T
__ __a__-_LE_V_EL_3
__ __ __
__
w__
r.. I Adobe
Módulo 1
INTRODUÇÃO
- Pré-requisitos
- ECMAScript
Sintaxe
- Case Sensllivity
. Onde inserir seu código
- Boas Práticas
1iI
..
EI\.IG
INTRODUÇÃO
PRÉ-REQUISITOS
Para este curso são necessários conllecimentos em:
Flash CS3 ActionScript 3 - Nível 2 ou possuir conhecimento equivalente.
Conhecer a Programação Orienlada aObjetos e lógica de programação facilita
o aprendizado neste curso.
ACTIONSCRIPT 3
ActionScript 3.0 é uma linguagem de programação poderosa. orientada a
objetos que significa uma etapa importanle na evolução das potencialidades
do Flash Player A molivaçao que dirig e a ActionScript3.0 é criar uma
linguagem servida de desenvolvimento rápido para conslrução de aplicações
ricas para a Inlernet. que se transformaram uma parte essencia l da
experiência na web .
Versões antigas da ActionScript ofereceram o poder e a fl exibilidade
requeridos criando experiên cias ünicas. OActionScript 3.0 promove agora
avanços na linguagem. fornecendo um desempenho soberbo e a facilidade do
desenvolvimenlo para criar aplicações altamente complexas. expansíveis e
código tolalmente orienlado a objelos. Com ActionScripl 3.0. os
colaboradores podem conseguir a produtividade e o desempenho exce lenles
com índice eap li cações que alvejam o Flash Player.
ECMASCRIPT
AclionScript 3.0 é baseado no ECMAScript, a linguagem de programação de
padrão internacional para códigos ActionScripl 3.0 é compilado com a
especi1icação da linguagem ECMAScripl, terceira edição (ECMA-262)
Contém também a funcionalidade baseada em trabalho na ediçao 4 de
ECMAS cript, ocorrendo dentro do escopo dos padrões ECMA.
,.
SINTAXE
Assim como na linguagem portuguesa e outras li nguagens. os discursos são
seqüências lineares de mor1emas e palavras. Obviamente. as palavras não se
alinham no discurso ao acaso. Exislem regras para ordená-Ias de modo que o
di scurso faça sentido. A sintaxe ocupa de estudar as palavras agrupadas
,;"
em segmentos que cumprem funções específicas no discurso eas relações
enlre os segmentos.
00 .
E 1\.1G
Na ActionScript temos uma série de concordâncias para que sejam
elaboradas frases correlamenle afim de que sejam geradas linhas de código.
Por exemplo. através de ponlos .. .... acessamos método s. propriedades.
evenlos eobjelos.
Disculiremos so bre a sinlaxe da AclionScripl ao longo desse curso. bem
como nos cursos mais avançados para possamos formar frases melhores
elaboradas.
CASE SENSITIVITY
AAclíonScript não permite que um objefo seja chamado com alterações em
maiúsculas e minúsculas.
Ouando você escreve AclionScript para o Flash Player 7 em diante. seu
código é sensivel. Islo significa que as variáveis com capilalização
ligeiramente diferente estão consideradas diferent es de si. Oseguinfe código
de AclionScripl exibe isso:
II uso mixado de capitalização
var fi rstName :String
"Leandro Amano";
1/ use fotal de caixa baixa
trace!firstname); // 112 0: Access of undefined
property firstname.
NOTA: Não é uma prática boa dilerenciar-se entre variáveis. usando um case
diferente. Para uma boa prática. possuímo s uma condição que muitos
programadores adotam:
Para variáveis. palavras começam com caixa baixa. ou caraclere "_". ou '$"
para caracleres seguinles é permitido se usar caracleres não acentuados.
números, e $.
Palavras compostas como firstName, tem o primeiro caraclere a parlir da
segunda palavra. sua capitalização em caixa alia.
Para nomeação de constanles. disculidas posteriormente. capitalização em
caixa alIa.
Para nomeação de classes, o primeiro caraclere de estar em caixa alia. os
seguinles possuem a mesma convenção de variáveis comuns.
Para mais detalhe, consulte seu instrutor.
ENG
ONDE INSERIR SEU CÓDIGO
Seu código "deve" ser inserido em trames e arquivos de classe externos.
BOAS PRÁTICAS
Seguir as convenções de nomenclatura.
Comentar seu código.
.;'- . '
.
Seguir as convenções de código
Otimizações no código.
Formatação da correta si ntaxe.
Para mais detalhes. acesse:
Q9Ql1Jml
ENG
ACTION SCRIPT :3 - LEVEL:3
www.eng.com .bf
r I Adobe
.. ' <';
Módu)o2
PROGRAMAÇÃO ORIENTADA AOBJETOS
- O Que é um ob jeto?
- Por Que objeto s?
- OOP x Procedural (estruturada)
- Ent endendo uma Classe
Propri edades
Escopo de variáveis
Métodos
Conslrutor
,',
III
ENG
PROGRAMAÇÃO ORIENTADA AOBJETOS
Este curso é locado ao início de desenvolvimento de aplicações Flash
orientado aobjetos
Ironicamente. usuários do Flash que são novos para programação orientada a
objeto (OOP) são geralmente fami liarizados com muitos conceitos de
orientação aobjeto. Sem saber seus nomes larmais.
Este capítulo desvenda algumas das term inologias e Iraz mais programadores
para acelerar conceitos da chave OOP Ainda serve como uma visão geral de
alto nível de OOP em Flash para programadores experientes que estão
lazendo sua primeira incursão dentro do desenvolvimento Flash
o QUE É UM OBJETO?
Um ob jeto é a repre sentaçao de uma entidade em um sistema. Resumindo.
tudo são objetos. No Ftash existe uma série de objetos prontos que facilitam
o desenvolvimento e tem aspectos condizentesao objeto.
Com certeza. não encontraremos nenhum campo de texlo executando um
play. ou um MovieC lip exibindo um texto. Isso porqueobjetos contém
caracteristicas retativas ao próprio ob jeto.
Se pensarmos em pessoas, elas podem falar. andar. voar não seria uma
característica do objeto pessoa.
Um objeto então se resume em suas caracterí sticas e no que pode executar.
POR QUE OBJETOS?
A idéia de OOP (Oriented Object Programming) é modelar um sistema
baseado em sistemas, o que representa maior adapta ção.
Cada objeto deve ser auto-explicativo e lácil de entender. Mas qual o
conceito de modetagem? Isso simptesmente se retere em como o sistema é
desenhado. um sistema desenhado em OOP se relere auma aplicação onde
cada unidade possui características e comportamentos relacionados ao
objeto
Imagine que você pode mudar características de cada ser vivo na Terra:-"·
Porém, cada ser vivo tem suas particularidades e coisas em comum Por
exemplo. todos os seres vivos respiram, logo poderíamos ler um objeto de
nome SerVivo. pessoas são seres vivos? Sim l Então dizemos ,..;'! - ' - - -
' :',';' .
ENG
pessoa estende o objeto se r vivo. Essa definição pod ena ser ainda mais bem
dividida se colocássemos um objelo mamifero entre pessoa e ser VI VO
Pensando assim teríamos um sis tema bem dividido o que apresentaria menos
redundância de código e menos manutenção. caso precisássemos trocar
apenas um dos objetos
OOP X PROCEDURAL (ESTRUTURADA)
OOP foi resumido nas linhas acima eestudaremos este assunto ao longo
desse curso. bem como nos posteriores aeste Linguagem eslruturada nao é
um lermo conheCido por lodos. mas aplicado por aqueles que la
desenvolviam no Flash sem a ullllzação da OOP
Resumindo linguagem estruturada (procedural). é uma linguagem baseada
em procedimentos lunções
Para esclarecer bem a diferença enlre ambos. imagine uma galeria de lolos.
Teríamos minimamente os seguintes itens.
- Foto Pequena
- Folo Grande
- Botão de Navegação
- Barra de Progresso para os devido s Pré-carregamentos
Galeria com o deVido Eleito de TranSições
Em OOP diVidiríamos cada um dos objetos em suas devidas classes. o que
indica que. caso qUiséssemos reutilizar agaleria e trocar (ou adaptar)
qualquer um dos elementos. poderíamos simplesmente editar a classe em
questão ou eslende-Ia (herança. discullremo s mais tarde).
Em linguagem estrulurada nao leríamos que copiar o arquivo fonte ( fia) e
adaptar cada uma das funções ao nosso
LISO
aluai . o que normalmente acaba
em grande e tedioso re-trabalho. sem contar que qualquer alteração errada
pode afetar lodo o reslo da aplicação. no caso. essa simples galeria.
ENTENDENDO UMA CLASSE
Uma apticação OOP deve ser Ião dividida quanto possível (encapsulamento),
para que cada objelo haja independente dos outros.
\.,...
...
Imaginando uma casa. teríamos diversos componentes. como. número de
.: .. ::. .
salas. sistema de ar condicionado. sistema de aquecimento slstem(:flétrico.
etc.
ENG
'-f_\"F_ , F
Todos esses elemento s em conjunto devem formar uma casa. e o arquitelo (e
os demais experts em cada assunto) é respof1sáve l pelo desenho de cada um
dos sistemas.
Se o arqui teto quer faze r uma nova casa. não é necessário recomeçar tudo
novam ente. A maioria dos componentes da casa já estão pré-construídos.
usando objetos pré-construído s a complexidade de construção de uma casa é
altamente reduzida. Obj etos if1dividuai s pod em ser substituídos, sem que haja
f1ecessidad e de reconstruir todo o sistema.
PROPRIEDADES
Uma classe pode COf1ter propriedades propriedades são características do
objeto . ela deve conte r um tipo etambém um valo r. São também chamadas
de variáveis de instân cia.
var name:String;
Defini ção de classe com propriedad es:
class AdobeCou r se {
l / propriedades
va r course:S tring
"Actio nScript 3 - Nivel ]";
"rar data : Da te ;
var d ays :uin t ;
l/mé todos
ESCOPO OE VARIÁVEI S
Quando se usa apalavra chave var dentro do bloco de uma classe, ela fi ca
disponívet por todo o corpo da classe. quando se usa a mesma palavra chave
dentro de btocos de funções ou loops. estas exi slem somente dentro do seu
corpo, escopo.
MÉTODOS
'.
São os comportamentos que o objeto pode executar. métodos também são
chamados de funções Elas podem passar argumef1to s e retornar dados
quando necessário.
.. .::<
. ,-.
E 1\.16
l/nome do método, nome do argumento, tipo do argumento, tipo do retorno
fun c tion setAltura(var altura:Number) :void (
altura
=
altura;
Na classe:
clas s Pessoa {
l/propr iedades
var
olhos:Strlng;
var _ altura:Number;
var _ peso:Number;
!
/ mé t odos
tunction se tAltura( a ltura:N umber ) :void
altur a
altu ra;
=
CONSTRUTOR
Você deve criar um método que escreve a construção do objeto. este é
chamado de mélodo construtor. O construtor tem o mesmo nome da classe.
mantém. inclusive a mesma capitalização.
class Pessoa (
l/propriedades
var
olhos:String;
var
altura :Number;
var _peso: Number;
l/con strutor
function Pess oa(olhos:String, altura:Number,
peso:Number)
{
olhos
altura
yeso
=
olhos;
=
altura;
peso;
ENG
l/ mé todo s
fun c tion se tAllura ( a ltur2. :Number) :void
a1 tUl"êl
aI tura;
O o ,.'
ENG
ACT'ON SCR'PT :a - LEVEL:a
www.eng.com.br
, Adob,
,', Módulo3
OPERADORES
- with
- protected
- internal
- super
- con ti nue
- switch
- case
- default
- break
- ?
(conditionat)
II
ENG
OPERADORES
WITH
with (o bj ec t : Obj e ctl
li
s t a t e ment(s)
Estabelece um obleto padrão para ser usado para execuçao de uma ou mais
declarações. reduzindo potencialmenle a quanlidade de códigos que
precisam ser escrilos
o parâmelro objecttorna-se o contexto no qual as propriedades. variávei s e
funções dos parâmetros na(s) declaraçao(ões) sao lidos Por exemplo se
object fosse my _array. e duas das propriedades especificadas corno lenglh e
conca!. essas propriedades são automallcamenle lidas como mv _arrav lenglh
e my_array con cal Em outro exemplo. se object fo sse stale callfornia
quaisquer ações ou decfaraçoes dentro da declaraçao wlth sao chamada s de
dentro da instãncia california.
Para achar o valor de um idenlificador no parâmetro das declarações. o
ActionScript começa no começo do escopo especificado por um ohjelo e
procura pelo idenlilicador em cada nível do escopo em uma ordem
especifica.
o escopo usado pela declaração wilh para resolver identificadores começa
com o primeiro it em na seguinte lista e continua até o último.
o objeto especificado no parâmetro objeto na mais aproximada declaração with.
Oobjeto especificado no parâmetro objeto na mais longínqua declaração with.
O objeto de alivação (um objeto temporário que eautomalicamenle críado
quando o scripl chama uma função que segura as variáveis locais chamadas
na função)
Oobjeto que conlém o script de execução atual.
Oobjeto Global (objetos buill-in tais como Math eString)
Para fixar uma variável dentro de uma declaração wilh. você deve ter
declarado avariável fora da declaração with. ou deve entrar o caminho
completo para a Timeline na qual você quer que avariável fique. Se você fixar
uma variável em uma declaração wilh sem declara-Ia, adeclaração with irá
procurar pelo valor de acordo com o escopo se avariável não .existir ainda, o
novo valor será lixado na Timeline da declaração Que loi chamada.
.., '";
-..
.. .
ENG
PROTECTED
class c l assNa me{
protect ed var varName;
prote cted cons t kName;
protect ed function meth odNa me()
II you r s tat e ment s he r e
protected namespace nsName;
Especifi ca que uma variáve l. constante. método ou namespace é disponível
so ment e para a classe que a define e para quatquer subclasse daquela
classe . A definição do protected em AclionScript 3.0 é sí mi lar a definição do
AclionScript 2.0. exceto em acessos resl rilos ao protected em ambos tempo
de com pilação e execução Por padrão umava ri áve l ou função está
di sponível para qualquer invocador chamado no mesmo pacote. Use esta
palavra-chave se você quer restringir acesso para uma variável ou fun ção
Você pod e usar esta palavra-chave somente em defini ções de classe. não em
definições de interface. Você não pode aplicar privado a uma classe. ou para
qualquer oulro pacole de definições de nível
A definição de prolecled em AclionScript 3D é mais reslritiva que aquelas
prolegidas em linguagem de programação Java Em AclionScripl 3.0
protected limita o acesso eslritamente asubclasses. uma vez que em Java
prolected ainda permite acesso para qua lq uer classe no mesmo pacote. Por
exemplo, se uma classe chamada Base cont ém uma propri edade marcada
como protecled. em ActionScript 3.0 somenle classes que estendem Base
podem acessar a propriedade prot ec led. Em Java. qualquer classe no mesmo
pacote como Base lem acesso pa ra a propriedade protegida mesmo se a
classe não é uma subclasse de Base.
INTERNAL
.: .
.
.',
A"- ....' . .... • .
.>, ;:;;,_:' [internal] var varName
[ i nternal] cons t kNam e
[interna l]
'",
":,.::,:,.<
.i
function fun c ti onNa me ()
II you r statements here
[int e rna l] c l ass clas s Na me{
II yo ur s tat e ments h e re
[ internal) namespace nsNa me
-: *" t"!;
,,
ENG
Especifica que uma classe. variável, constante. ou função está disponível a
qualquer invocador dentro do mesmo pacote. Classes. propri edades. e
métodos pertencem ao acesso modificador internal por padrão.
SUPER
super ( [argl,
... , argN])
super.method([argl,
... , argNJ)
Invoca a superclasse ou versão pai de um método ou construtor. Quando
usada dent ro do corpo de uma classe construtora. a declaração super()invoca
a versão da superclasse construtora. A invocação para a superclasse
construtora deve ter o número correto de argumentos. Note que a superclasse
construtora
é sempre chamada. você tendo ou não chamada-a explicitamente.
Se você não o fez. uma invocação sem argumento s é automaticamente
inserida antes da primeira declaração dentro da subclasse do corpo
conslrulor. Isto quer dizer que se você definir uma função conslrulora denlro
de uma subclasse. e a subclasse construtora ter um ou mais argumentos,
você deve chamar exp licitamente a superclasse construlora com o número
correto de argumentos ou um erro irá ocorrer A invocação para a superclasse
construtora. porém não precisa ser a primeira declaração em sua subclasse
construtora. como era necessário em ActionScript 2.0
Quando usada no corpo de um método de uma instância. super deve ser
usada com o operador ponto () para invocar a versão superclasse de um
método e pode opcionalmente passar argum entos (arg .. argN) para o método
da superclasse. Isso é útil para criar métodos de subclasse que não somente
adicionam comportamento adicional a métodos de superclasse. mas também
invocam os métodos de superc lasse para lazer seus comportamentos
originais
Você não pode usar a declaração super em um método estálico.
CONTINUE
continue
[ labelJ
Pula todas as declarações remane scentes no toop mais próximo e começa a
próxima interação do loop como se o controle tivesse passado para o lim do
loop normalmente. Adeclaração continua a não ter eleito lora de um loop.
..:1...
ENG
SWITCH
switch (expression)
{
caseClause:
[defaultClause:l
Faz o control e de uma de muitas declaraçóes. dependendo do valor de uma
expressão. Todas as dec larações trocadas deveriam incl uir um caso de default
que irá executar se nenhuma das declaraçóes de caso eq uivaler-se com a
expressão. Cada declaração case deveria acabar com uma declaração break.
que previne um erro. Quando um caso fura, ele executa o código na próxima
declaração case, mesmo apesar que aquele caso pode não equivaler-se a
expressão de teste.
CASE
case jumpTarget: statements
Define algo a execular na declaração swi tch. Se o valor da condição fo r igual
a do parâmetro da expressão do switch usando equivalência estrita (= -=).
o Flah Player executa as declarações nos parâmelros de declaração até
encontrar uma declaração break ou o fim do switch.
Se você usar a declaração case lora do switcll . ela produz um erro e o scripl
não compila.
Sempre termine os parâmetros da declaração com um break. Se você omitir o
break dos parâmetros. ele continua executar com a próxima declaração case
ao invés de sair do switch.
DEFAULT
', .
default: statements
I'·
Define um caso padrão para o swi tch. A declaração executa se o parâmetro da
expressão do switch for diferente (usando equivalência estrita) qualquer dos
parâmetros de expressão que seguem a palavra-chave case para uma
declaração switch dada.
Um switch não necessita de um default. Um default não tem que estar em
último na lista. Se você usar um default fora do switch, elevai produzir um
erro e não vai compilar.
"
::.ff.l\.fY::.: ,'c
:í,
ENG
BREAK
break [l abe l]
Aparece denlro de um loop (for. fOL .in, lar each.. in, dO.. while. or while) ou
dentro de um bloco de declarações associadas com um case particular em
um switcll. Guando usado em um loop, o break inslrui o Flash a pular o resto
o do loop. parando sua ação e executando o código seguinte. Quando usado
em um switch, o break instrui o Flash a pular o resto das declarações naquele
bloco case e pula para a primeira declaração que segue o swi tch anexado.
Em loops aninhados. o break so mente pula o reslo do loop imediato e não
para uma séri e int ei ra de loops aninhados. Para parar uma série inteira de
loops an inhados. use o label ou try.. catch .. linally.
?: (CONDlTtONAL)
expressionl
?
expression2 : expres s i on3
Avalia a expressionl. se o valor da expressionl lor verdadeiro, o resu ltado é o
valor da expression2: caso contrário o resultado e o valor da expressionJ
Operandos
expression1Boolean - Uma expressão Que ava lia para um valor booleano:
geralmenle uma expressão de comparação. como x < 5.
expression2' - Um valor de qualquer tipo.
expression3:* - Um valor de qualquer tipo.
Resu ltado' - Ovalor da expression2 ou expressionJ
ENG
Módulo4
FUNÇÕES
- Funções acessadas em pacotes
- Funçôes globais
- Fun ções aninhadas
- Funções em nivel de arquIvo
Funçóes recursivas
ENG
·
.'
FUNÇÕES
. ;.' Tivemos a primeira parte de funções no módulo ActionScript 3 nível 1, agora
temos sua continuidade nesle módulo.
Lembrando que 1unções nada mais
S30
que atalhos nomeados para um trecho
de código , as convenções de nomenclalura devem seg uir a mesma
especifi cação de uma variável.
Se uma função é definida no mesmo script, esta pode ser chamada antes de
ser definida:
!/ActionScript 3.0 Language and Component s Reference
var yNum:Num.i:;er
=
sqr(J);
trace (yNum) ; II output:
9
function sqr( xNum:Number )
return Math.pow(xNum, 2);
Urna função é semp re um objelo da classe Fun cliol1 , o que nos permi le usála também da maneira abaixo :
va r
fun cao:F unction
m
funct ion(para metro:Number) :Number
re turn pa r a metro * para metro;
var resultado:Number
funcao(S);
trace(resultado) ;
FUNÇÕES ACESSADAS EM PACOTES
Um arquivo externo ".as'· pode ser usado para criar arquivos de classe, corno
já vimo s. Também serve para a criação de interlaces (assunto não discutido
neste módulO) e também permite a criação de funçõesde uso externo.
Em ActionScript3.0, podemos definir uma fun ção para que esta esteja disponível
através de pacotes. como é o caso da função flash.net.navigateToURLO.
Para criarmos um arquivo desse tipo , não podemos detinir a palavra chave
class dentro do arquivo ·'.as", como segue abaixo:
ENG
l/arquivo de nome author as
pack.age pacote{
public function author() :String
return "Leandro Amano";
Repare que o arqUivo ·'author.as·· está dentro do pacote de nome "pacote" e o
nome da função e o nome do arquivo são o mesmo. ambos respeitam a
mesma capltallzaçao. sendo que neste caso. o primeiro caractere é sempre
uma letra minúscula Já que este arquivo é uma função. não uma classe
Para usar
lmport pacote.author;
trace( a uthor());
Para saber nlais. procure por package-levei funcl ions.
FUNÇÕES GLOBAIS
Funções globais são como funções em nivel de pacotes. porém estas estão
no mesmo nivel de seu arquivo ".lIa", é o caso da função globattraceO que
não precisa ser importada para que seja utilizada.
l/arquivo de nome author.as, repare que o package está vazio
package (
public function author() :String
return "Leandro Ama no";
Para usar:
trace (author ());
;,
,,;
EI\.IG
FUNÇÕES ANINHADAS
Conceituai mente é Lima função dentro de uma outra função, permitindo a
criação de cód igo reutilizável exclusivo para uma determinada função.
Eunction a(valor : Number) :String
return b(valor) .toString();
function b('_"alor:Number) :Number
retur n valor / 2;
a
var resulta do:S tring
trac e(resultado)
(25) ;
i
FUNÇÕES EM NíVEL DE ARQUIVO
Quando criamos uma função fora do corpo do package. disponibilizamos uma
função somente para aquele especifico arquivo, Neste tipo de uso não
podemos atribuir afun çao nenhum acesso modificador.
package
public class So urc eFile {
public function SourceFile()
teste ()
i
Eunct ion teste () : void
. trace("Tes te!")
•
> ". ... , .;.
••
."
I
.......
':::. \. .
No arquivo de teste.
var sourc eFile :SourceFile
new SourceFi le()
i
FUNÇÕES RECURSIVAS
É uma função Que chama ela mesma, Uma função recursiva deve sempre ter
um fim, caso contrário o script é chamado infinitamente, gerando erro no
com pi lador. Onúmero máximo pad rão de repetições de uma recu r:t5 é 1000.
O
.d/·
.....-Wj
ENG
o exemplo abaixo é o clássico cálculo malemático fatorial de um número.
f unction Eactorial(valor:Number ) :Number
iE (valor <
O) {
return NaN;
}else if (valor 1) (
return l}else{
return valo r * factoriallvalor-l);
/1
3 * 2
* 1
var resultado:Numbe r
factoria l
trace (re s ultado) ;
II 5 * 4 * 3 * 2 * 1
r esu ltado
factorial(S);
trace (r es ultado) ;
(3) ;
..,
ENG
www.eng.com.br
, .ACT'ON SCR'PT <I - LEVEL <I
Ad ob.
MóduloS
DISPARANDO UM EVENTO
- Acessando o objeto via propri edade target
Acessand o o objelo via propri edade currenlTargel
. Custom Evenl
Estendendo ullla classe de evento
iii
EI\.IG
DISPARANDO UM EVENTO
Eventos ocorrem o tempo todo em AclionScript. como vimos ao longo de
todos os módulos, estes ocorrem em resposta a um clique de usuário, ao
adicionar um objeto em uma display list. ao mover o mouse, ao fina lizar um
,Ore/oader de arquivo externo, etc. Esses evenlos são categorizados como
buill-in evenls porque já foram definidos pelo próprio Flash Player.
Nós como programadores também possuimo s a capacidade de criar novos
eventos. bem como disparar eventos já construídos no FlaSh Player para que
possamos estender as funcionalidades de nossa ap li cação, para assi m ulitizar
de maneira apropriada os conceitos da orientação a objeto em ActionScript 3.0.
Todos os eventos nesta linguagem são definidos de modo padrão
ob j .addEvent Lis tener(Cl asse DoSvento.EVENTO ,
l is tener) ;
A arquitetura de eventos no Ac1ionScripl 3 é baseada no W3C Documenl
Objecl Mode/ (DOM) Leve/ 3 Events Speci/icauon. di sponível na url hltp:/!
,vwW. w3. org/TR/DOM -Level-3- Evenls.
Não esqueça Que sem pre que desejar remover um evento. você deve utilizar
ob j .remove EventListene r (ClasseDoEvento.EV ENTO,
listener) ;
ACESSANDO OOBJETO VIA PROPRIEDADE TARGET
Dentro de um /istener, afunção Que é determinada a ser executada quando o
evento acontece. existem propriedades Que o evento trás consigo como. por
exemp lo, a propriedade type , que indica o tipo do evento, a constante
MouseEvenl.CLlCK retorna a string '·click". existe uma outra propriedade a
propriedade target. esta retorna o objeto Que está executando a ação, que nem
sempre é o objeto Que tem o /istener cadast rado. No exemplo abaixo quando
clicamos no objeto azul. esle é rolacionado em 45 grau s, independente do
/istener eslar cadastrado ao ob jeto intei ro. no caso o quadro negro que
contém o quadro azul:
import flash.display.Sprite;
import fla s h .event s. Mo u seEvent;
var quadro:Sprite = new Sprite();
quadro.graphics.beginFill(OxOOOOOO) ;
... _. :'.'"' ","c., •
ENG
quadro.graphics.drawRect(O,
o,
100, 30);
quadro.graphics.endFill() ;
var quadrolnterno:S prite = new Sprite();
quadrolnterno.graphics.beginFill(OxOOOOFF) ;
quadrolnterno . graphics . drawRectIO,
O,
50, 30);
quadro lnterno. graphics . endFill() ;
addChild(quadro) ;
quadro. addChild (quadrolnterno) ;
quadro . x
quadro.y
200;
quadro.add EventListener(Mous e Eve nt.CLI CK ,
onC li ek; ;
runeti o n onC liek (e:MouseEvent) :void
e target.rotation
=
45;
ACESSANDO OOBJETO VIA PROPRIEDADE CURRENTIARGET
Para acessar o objeto que estamos registrando ao lislener devemos usar oulra
propriedade. a propriedade currentTarget, o mesmo exemplo anterior seguirá
abaixo. mas repare que agora. independentemente de se clicar no objelo azu t,
sempre será disparado o evento para o objeto inteiro. no caso o quadro
import Elash.display.Sprite;
import flash.events.MouseEvent;
var quadro:Sprite
=
new Sprite();
quadro.graphics.beginFill (OxOOOOOO);
quadro.graphies.drawRect(O,
o,
100,30) ;
quadr o.g raphies.endFill() ;
'lar quadrolnterno:Sprite
=
new Sprite();
quadrolnterno.graphics.beginFill(OxOOOOFF) ;
quadrolnterno.graphics.drawRectIO, O,
quadrolnt e rno.graphics.endFill() ;
addChild(quadro) ;
quadro. a'dclChi ld (quadrolnterno) ;
50, 30);
ENG
quadro.y
quadro.x
200;
quadr o.addEvent Listener(MouseEve nt. CLICK,
onClickl;
fun ction onCl i ck( e:MouseEvent) : vo id
e .curr ent Target .rota ti o n
=
45;
CUSTOM EVENT
Para disparar um evenlo personalizado. precisamos que nossa classe len ha
herança com a classe Ev enIDispalcher de alguma forma. No exem plo abaixo
vamos fazer com que a classe Boião lenha doi s evento s personalizados.
Botão.CLlCADO e Bolão.ADICIONADO NO STAGE
l/Classe Botao
package com.l eandroama no. l ayout (
impor t f l ash.disp la y.Sprite ;
import Elash.display.GradientType;
impo rt Elash.events.2vent ;
import flash.events.MouseEvent;
public c l ass Bo tao ext e nds Sprite{
publi c s t at ic cons t CL I CADO
=
"clicado";
public static const ADICIONADO NO STAGE
" adicionado na display list";
public Euncticn Botao ()
{
graphics.beginGradientFill(GradientType.LINEAR,
[O xFFOOOO, Ox OOOOFF),
[1 00 , 10 01 ,
[O xOO , Ox FF] );
graphics.drawRect( - 50, O,
100,30);
gra phi cs . e ndFill () ;
bu tt o nMod e
tru e;
addEventListener (MouseEvent . CLICK,
clickHandler) ;
ENG
add EventListe n e r{Event.ADDED TO STAG E , addHand Ier );
private function
cl ickHandIer
(e: : void
dispatchEvent(new
Mo us eEventIBotao.CLICADO»
;
private Eunction addHandler(e:Event) :void
dispatch Event(new
Event(Botao.AD I CI ONADO_ NO STAGE»;
arq uivo de teste:
import com .l eandroamanc.layout .30tao;
Import tlash.Events.Event;
va r meuBo tdo:Botao
meu30tao.x
new Botdol);
meuBotao .y =200;
doClicar};
meuBotao.addEventListener(Botao ADICl ONADO_NO_STAGE ,
aoAd.lc ionar) ;
addChild(meuBotao) ;
function doClicar(e:Event) :vo i d (
trace("tipo:", e.type);//tipo: c li cado
trace("al vo: ",
e . curren t Target , "\n") ii /a l vo:
[ob )ect Botao)
functian aoAdicianarle:Event) :void
trace("tipo:", e.type) i i/ tipo: a dicionado na
disp la y li st
trace("dlvo:", e.currentTarg e t,
BOtdO)
"\n");//aIvo:
E 1\.16
ESTENDENDO UMA CLASSE DE EVENTO
Neste exemplo entenderemos de maneira simplóna como fazer com que os
eventos fiquem separados da classe Botão.
IIClasse BotaoEvent
package com.leandroamano.events {
import flash.events.Event;
public class BotaoEvent extends Event
{
punlic static const ADICICNADO NO ST,ll.GE
"adIcionado na display listO;
public function
bubbles:Boolean
=
false,
(type:String,
cancelable:3001ean
=
false)
super(type, bubbles, cancelable);
i/Classe BotaoMouseEvent
package com.leandroamano.events {
import flash.events.MouseEvent;
public class BotaoMouseEvent extends
t'louseEvent {
public static const CLICADO
"clicado";
public functioo
30taoi'1ouseEveot (type: Str iog, bubbles: Boolean
true, cancelable:Boolean
=
false)
super (type, bubbles, cancelable);
ENG
l/Classe Bo taoSep a rad o
package com .leandroa mano. la yo ut (
import fla s h .d i sp l ay .Sprite;
import Elash . di s play.GradientType;
import Elash.e ven ts.Event ;
impor t
Elash. events .HouseEvent;
impot:t com. le androamano.events .BotaoEvent ;
i mport com .leandroa man o . events. Botaot'louseSvent ;
pubJic clas s BotaoSepat:ado extends Sprl t e{
pubIle sLatlc con st CLI CADO
"c llcado".
publlC stati c const ADICIONADO NO STAGE
"adicionado na display 1 ist ";
pUOllC EuncLlcn BotaoSeparado()
[OxFFOOOO,
OxOOOO FF1,
[100,
100J,
[OxOO,
graphics.drawRect(-50,
0,
Ox FFll;
100,30);
graph i cs.endFill ();
but ton.."'1ode
true;
add EventListener{MouseEvent .CLI CK,
cl i ckHa ndl e r) ;
addEve ntL istener(Event.ADDED_TO_ STAGE, addHa ndler);
priva t e f un ct ion
c li c kHandl er (e: MouseEvent) :vo id
dispatchEvent(new
BotaoMouseEve nt
.CLICADO»
;
private f un ction addHandler(e:Event) :vo id
dispa t chEvent(new
BotaoEve nt( BotaoEven t . ADlCIONADO NO_STAGE»;
ENG
No arquivo de teste:
import com.leandroamano.layout.BotaoSeparado;
import com.leandroamano.events.BotaoEvent;
import com.leandroama no.e vents.BotaoMouse Event;
var meuBotao:BotaoSeparado
=
new BotaoSeparado();
meu3 0tao.x = meuBotao.y =200;
meuBotao. addEventListener
CLICADO,
aoClicar) ;
meuBotao. adck'VentLi stener (BotaoEvent. . ADICIONACO_NO_ STAGE,
aoAdicionarl;
addChild(meuBotao)
function :void {
trace("tipo:",
e.type); /It.ipo: clicado
tl·C'. c e("alvo:",
e. cu rren tTal·get,
[obj ec t
"\n");//alvo:
BotaoSe parado)
function aoAdiciona r (e:30taoE'/ent.) :'v'oid (
trace("tipo:",
e.type); //tipo: ad icionado na
display li s t.
t.r ace l."alvo:",
e.currentTarget,
"\n") ;/la1vo:
[ob ject BotaoSeparadol
Um dispatchEvent não precisa estar necessariamente dentro de uma função
utilizada como lislener , podemos também (ê o que fazemos na maioria das
vezes) dispará-Ias dentro de uma função qualquer.
. 'i-· ·
ENG
www.eng.com.br
ACT'ON SCR'PT 3 - LEVEL 3
Adobe
Módulo 6 .
CLASSE SHAPE
- Objeto Triângulo
ObJeto Círculo
III
ENG
CLASSE SHAPE
Elash.di s play.Shape;
Essa classe permite Que criemos objetos visuais muito leves. Esses desenhos
(contornos. preenchimentos) são criados através da classe Graphics.
repre sentados pela propriedade graphi cs
A classe Shape não suporta clique de Mouse como a classe Sprite e
MovieC lip, por exemp lo, por este motivo ela ocupa muito menos memória
que um objeto do tipo Sprite. A classe Shape não pode conter objetos dentro.
já que não deriva da classe abstrata Di splayObjeclContainer. .
impor t El as h . displa y .Shape ;
var d ese nho:Shape
=
new S hape();
desenho.graphics.beginFill!Ox44FFFF) ;
90 , 50);
desenho .g raphics.endFill ()
i
a dd Child(de se nho) ;
Éde boa utilidade deixar objetos derivados do tipo Shape para posterior
uti lização:
OBJETO TRIÂNGULO
import Elash . display .S hape;
function triangulo(x:Number, y:Nu mber, w:Number,
h:Numbe r, cor:uint) :Shape (
var obj :Shape
=
new Shape();
ob j .graphics . beginFill( cor )
i
obj .g raphi cs.moveTo(w/2, O)
i
obj .graphics. li neTo(w, h);
; • .. obj.graphi cs.l ine To(Q, h);
obj.graphics.endFill() ;
obj.x
X i
obj.y
y;
return obj;
=
var t:Shape
OxFFOOOO) ;
addChild(t)
i
tri a ngulo(lOO, 200 , 200, 2 00,
.
I
Er\J6
triangulo{40 0,
var t2:Shape
200, 200,100 ,
OxOOFFOO) ;
addChild{t2) ;
OBJETO CÍRCULO
import flash.display.Shape;
function circulo{x:Number, y:Number,
raio:Number,
cor:uint) :Shape {
var ob j:Shape
=
new Shape{);
obj . graphics.beginFill{cor);
obj . graphics. dra."Circle (O,
O,
raio);
obj . graphics . endFill () ;
obj . graphics. endFi 11 () ;
obj .x
X;
obj.y
y;
return obj;
var c:S h ape = c irculo( 300,
300,
50, Ox990000) ;
addChi ld (c);
var c2:Shape
=
circulo(300,
100, 100, Ox000099);
addChild (c2) ;
Posteriormen te colocaremos esses códigos dentro de suas sugeridas classes.
ENG
www.e ng.com .br
, ACT'ON SCR'PT :3 - LEVEL:3
Adobe
.( ....
•.•
v- __ _ _.,.;_
......
......>;o.
Módulo7
CLASSE ARGUMENTS
- arguments.length
- arguments.callee
III
ENG
A classe arguments é usada para armazenar os argumentos de uma função, a
propriedade caller do ActionScripl 2 foi removido nesta versão.
ARGUMENTS.LENGTH
l.
..
Retorna o número de argumentos da função.
. : ":':..
var no me:String;
Eunc tion setValor(nome :Stringl :S tring
r e turn arg umentsfarguments.length- lJ;
n ome
setVa lor("Leandro Amano");
trace(nome); i/Leandro Amano
ARGUMENTS .GALlER
Retorna a lunção que está atua tmente sendo executada.
import Elash.disp l ay.Sprite;
impor t
Elash.events.MouseEvent;
var guadro : Spri te = new Spritell;
quadro.gr a phics.beginFi ll (Math . r an dom()*OxFFFFFFI;
guad r o . graphics.drawRec t( O, O, 100, IDO!;
quadro.graphics.endFill() ;
quadro.addEvent Listener( Mou seEvent.CLI CK,
o n Cl i c k) ;
guadro.buttonMode
t rue ;
addChild(quadro) ;
f unct i o n onC li ck(e:Mouse Event) :vo id
e. currentTarget.x += 20;
//Re move mos o list e ner dinami ca me nte a pós o
primei ro c li que
e.c u rrentTarget.removeEventListener(argument s [O] .type,
a rguments.callee) ;
Em ActionScript 3 é recomendado que se utilize o operador .. resl
classe arguments.
da
O . ,l''''r---'''-J
ENG
Módulo 8
CONSTRUINDO UMA CLASSE ABSTRATA
- Classes abstraias e co ncrelas
- Conceito
- Ex.empl o
ENG
CONSTRUINDO UMA CLASSE ABSTRATA
CLASSES ABSTRATAS ECONCRETAS
Uma classe abslrala é desenvolvida para representar entidades e conceilos
abslralos. A classe abslrala é sempre uma superclasse que não possui
inslâncias. Ela define um modelo (lempla/e) para uma lun cionalidade e
fomece uma implementação incompleta - a parte genérica dessa
funcionalidade - Que é compartil hada por um gru po de classes derivadas
Cada uma das classes derivadas complela a luncionalidade da classe abslrata
adi cionand o um comportamenlo específico .
Uma classe abstraia normalmente pOSSUI mélodo s,ªbstratos Esses métodos
são Imp lementados nas suas classes denvadas concrelas com o objetivo de
delinír o comportamento específico. O mélodo abstraio define apenas a
assinalura do mél odo e. portanto. não co ntém código
Por outro lado. as classes concrelas Implementam todo s os seus mélodos e
permitem a criação de instâncias. Uma classe concreta não possui métodos
abstratos e. geralmente. quando utilizadas neste contexto, são classes
derivadas de uma classe abstraia.
CONCEITO
Classes abstraias não exislem em AclionScripl 3D, o lermo correio seria
classes de estilo abslrato. por convenção iremos chamá-Ias de classes
abslratas.
Um classe abslrala é uma classe Que não pode ser inslanciada direlamenle.
nem conlém em seus mélodos a sua própria implemenlação. apenas nome.
acesso modificador. parâmelros e lipo de retorno. essa classe abst rata Que
contém mélodos abslrato s pode ler zero ou mais mélodos abstratos. Sua
diferença para as interfaces é Que os métodos não precisam ser públicos e
não precisam necessariamente ser sobrescrilo s em suas classes derivadas.
Uma classe abslrata é sempre a classe super. de generalização. que pode
derivar para n classes.
Caso o usuário tente instanciar uma classe abslrala diretamente ou Qualquer
um de seus métodos sem sobrescreve -los. devemos jogar um erro ao
usuário.
Esse tipo de classe é importantíssimo para o uso de pol imorfismo
0°
' :
.
t
ENG
No core display classes temos três classes de estilo abstrata, DisplayObjecl ,
InteracliveOb ject e Di splayObjeclConlainer
A palavra-chave override será utilizada para so brescrevermos os métodos, e a
palavra-chave final será usada quando quisermos que classes derivadas de
uma classe abslrala não sobrescrevam seus método s
Dois exemplos clássicos de Design Pallerns são o Faclory e o Template
Method pallerns.
EXEMPLO
pack age {
impOl·t. Elash. erl·ors. I llega lOpera t ionError ;
public class AbstractPess oa {
protected var y rof is sao : Stri ng;
protected var
public function AbstractPessoa ( ... args)
if (args [01
! this:' {
throw ne\,;
IllegalOperat i onErro r ("Error #2012: !'.bst ractPessoa$
class can n ot oe instantiated.");
public function a nd ar ( ) :void {
.: public function get profissao!) :String {
throw nev'
IllegalOpe rationError("Method mu s t be overrided.
H
)
;
return null;
public function se t
profissao(valor:String) :void
thro ..., nev,
Illega lOp era tionError("Method mu st b e overrided.
return void;
H
)
;
.',
EI\JG
public Euncticn get hobby() :String (
throw new
IllegalOperationError("Method must be overrided.");
return null;
public functicn set
hobby(valor:String) :vo id (
throw ne"
IllegaIOperationError("Method must be override d.");
return void;
packag e {
public class Amano extends AbstractPessoa {
public f u n ct i cn Bruno() (
super{t.hisi;
ove rri de p ub lic function get
profissao() :Strlng
return _prof issao;
override public function set
profissa o(valor:Str ing) :void (
_ protissao
=
valor;
return void;
var amano:Ab stractPessca
var proEissao:String
"Instrutor Adobe";
trace(profissa o) ;
=
=
ne w Amano();
amano.profissao
=
ENG
POLIMORFISMO
Conceito
- Exem plo
ENG
________________
A_CT_I_O_N
__
____
S C_RIPT
________
3 -_L
__
E_V
__
E_L__
3__
__
1iI
,
,.. I Adob.
POLIMORFISMO
CONCEITO
Este conceito é baseado na idéia de que diferentes classes podem
implementar o mesmo nome nos métodos, porém. com funcionalidades
diferentes.
Também poderíamos utilizar interfaces e suas implem entações utilizando
recursos de casting para fazer uso do polimorfismo, Para aproveitamento dos
assuntos aprendidos até aqui utitizaremos a herança eabstração para isso.
EXEMPLO
Segundo a id éia do ca pitulo anterior (Capítulo 8- Con struindo uma Classe
Abst raIa) criaremos mai s dois objetos que estendem a classe AbstractPessoa.
package {
publi c c l ass ControlaPe ssoas (
publi c Eunction Cont ro l aPessoas()
var pessoa s:Array - new Arraylnew
Ama no() . new Politol) . new Venegas() I ;
f or each (var i:* in pessoasl (
exe cuta li);
pub li c fun ct ion
: void
pessoa . a nd ar() ;
No frame de um arquivo .Ita:
var contr ol:Contro laPessoas
ne w
Con trolaPessoas() ;
o resu ltado no output é o chamado dos três diferentes métodos andar() de
cada objeto.
Não esqueça que para este uso necessitamos sobrescrever cada um dos
métodos da classe super AbstractPessoa. Ficou fácil imptementar oO
polimorfismo em AclionScript 3.0.
O
ENG
Módulo 10
CLASSE XML EXMLDOCUMENT
- Objelo XML
- Lendo um XML externo
ENG
CLASSE XMl EXMLDOCUMENT
OBJETOXML
Desde o ActiollScrípt 1 (Flash Player 5) o Flash possui a capacidade de ler
objetos XML externos, baseados no DOM (W3C Document Object Model) o
padrão para interação com documentos XML
Em AclionScript 10 a classe XML foi tolalmente modílicada, XM L é um tipo
nativo do Flash. antigos métodos e propriedades para aleitura desses dados
externos (firstChild chitdNodes. etc) se encontram agora na classe
XMLDocument. localizada no pacote flash.xml .
AAclionScript 10 implementa o padrão ECMAScript lar XML (E4X) que será
di scutido po steriormente.
I/Top Le v e I cIass XML
va r xml : XML
=
c doe >
ec ur so> Ac tionScript 3.0c/curso>
cc ur so>Adobe Flex 3c/curso>
ec ur so>Adobe Dreamweaver CS3</c u rso>
<curso>Adobe Co l dFusion 8e/curso>
</àoc>;
LENDO UM XML EXTERNO
Para a leitura de um XML externo utilizaremos uma leitura que arquivo externo
comum como vimos no módulo ActionScript 3 nível 2. Dentro do evento
Event.COMPLETE. trataremos o objeto lido como um XML Documenl.
flash.ne t.URLLoader;
import flash.net.URLRequest;
import Elash.xml.XMLDocument;
import fIash.events.Event;
var l oader:URLLoader
=
new URLLo a der();
l oade r. add Ev entLi s t enerIEvent.COMPLETE.
o n Co mpl e t e ) ;
loader.Ioadlnew uRLRequest("xml_ex terno.xml"));
f unct ion o nC omplete Ie: Event) : voi d
var xm l:XML
=
(
XML(e. c urr e ntTarge t.data );
ENG
CLASSE XMl EXMlDOCUMENT
OBJETO XMl
Desde o ActiollScript 1 (Flash Player 5) o Flash po ssui a capacidade de ler
obj etos XML externos, baseados no DOM (W3C Document Object Model) o
padrão para interação com docum entos XML.
Em AclionScript 3. 0 a classe XML foi tota lmente modificada. XML é um tipo
nativo do Flash. anti gos métodos e propriedad es para a leilura desses dados
externos (firstC hild, chi ld Nodes, etc) se enco ntram ag ora na classe
XMLDocument. lo calizada no pacote flash.xml.
A ActionScript 3.0 imp lementa o pad rão ECMAScri pt for XML (E4X) que será
di scutido po steri ormente.
l/ T ap Le v eI c I ass XML
va r xml:X ML
=
edoe >
ec u rso>Ae ti o n Se r i pt 3.0e/curso>
ec u rso>Adobe F Iex 3e/cu rso>
<c u rso>Ad o b e Drea mweave r CS3e/c u rso>
ce u rso>Ado b e Co l dFusi o n 8e/curso>
</doc> ;
LENDO UM XMl EXTERNO
Para a leitura de um XM L externo utilizaremo s uma leitura que arq uivo externo
comum como vimos no módulo ActionScript 3 nível 2. Dentro do evento
EvenI.COMPLETE. tralaremos o objeto lido co mo um XMLDocumenl.
i mp o rt f I as h.ne t . UR LLo ade r;
import fI as h . net . URLReques t;
impor t
f la s h.xml .XMLDoe ument;
impo rt fI as h . events . Event;
var loader : UR LLo ad er
=
new URLLoader();
l oader.ad d EventL i s t e n e r (Eve n t . COM PLETE,
o n Compl e te) ;
l oad e r.l oad( ne w URLR e qu es t(" x ml externo . x ml-);
f un c ti o n onComp l ete (e : Eve n t ) : vo id (
va r x ml: XML
=
XM L (e. e u rre n t Ta rg et . da t a ) ;
ENG
var xmlDoc:XMLDocument
xmlDoc.ignoreWh ite
=
new XMLDocument();
true;
=
xm lDoc.parseXML(xml) ;
var tamanho:uint
=
xm lDoc.firstChild.childNodes.lengt h;
for(var i:uint
=
o·
i<tamanho; i++) {
Ií ActionScript 3.0
II Adobe Flex
3
I I p.d o be Dre a mweaver CS3
1/ Adobe ColdFusion
8
i xmlC<:x:. tü s tCl"lild .childNodes [i) . firstChild nodeValue ) ;
l/Teste completo com disparo de evento
packag e {
impo rt fla s h . n e t.URLLoader;
import fla s h . net.URLRequest;
i mport fla s h.xml XML Document;
import flash.events.Event ;
import flash.event s .EventDispatcher;
p u blic c l ass XMLExterno exte n ds
EventDi s patcher{
public static c onst COMPLETO
"comp l eto" ;
private var loader:URLLoader;
private var
dados : Array;
public fun c ti o n XMLExterno()
loader
=
{
n e w UR LLoad e r();
loader.addEventListener(Eve nt.COMPLETE,
onComplet e ) ;
dados
ne"J Arra y () ;
public function
o
., .
ENG
loader.load(new URLRequestlurl));
private function onComplete(e:Event ) :void
var xml: Xt'IL
XMLle . c ur re ntTarget .da la) ;
var xmlDoc·XMLDo cume nt
new
Xt-1LDocument () ;
xmlDoc.ignoreWhJte - true;
xmlDoc.parseXMLlxml) ;
var tarnanhO:Ulnt
'
xm 1 Doe. firstChild.ehilcL.'lcdes length;
for(var
i Ulnt.
0;
l<Lamanho;
_dados. push (xmlD:x:: . f irstChild. chilclNc:des [i) . f irstChi ld. ncdeValue) ;
dispatchEvent . n ew
Sve nt (XM LE xterno.COMPLSTO) I;
publie functian get dados() :Array (
return _ dados;
publie function set
dados (v alor:Array) :void
valor;
IINO
arquivo de teste
impor t
Elash.events.Event;
var xm l :XMLExterno
new
ENG
xml.addEventListener(XMLExterno.COMPLETO,
onCompleto) ;
xml.load("xml externo.xml");
functlon onCompleto(e:Event) :void {
var dados:Array
=
e.currentTarget.dados as
,lI.rray;
for(var i :uint
trace( i,
}
}
=
O; iedados.length; i++} {
":", dados(i]);
ENG
'"a:i
ACTION SCRIPT :3 - LEVEL:3
www.eng.com.br
r.. . AUTHORI,Z ED
Adobe
Módulo '11
CLASSE ANIMATOR
- Convertendo animação de timeline para XML
- Classe Anlmator e Classe rvlotlonEvent
iii
ENG
CLASSE ANIMATOR
CONVERTENDO ANIMAÇÃO TIMELlNE PARA XML
Para converter uma animação produzida em Timeline para XML devemos
inicialmente selecionar lodos os frames que desejamos capturar. em seguida.
vá até o mellu > commands > copy motion as xml. Também é possível
exportar esse motion como um arquivo do tipo xml. neste caso devemos
tralar a leitura dele como visto no capítulo anterior (Capítulo 10 - Classe XML
e XMLDocument) .
., -!.
'
Devemos saber Que esse tipo de comando funciona para lima única layer de
cada vez.
Help
Get r','lore Commandr, ...
P.lJn Cornm.3nd ...
Export r'lotion xrvlL
Imp,)rt rvlotion xr··1L
Te$t in Apollo
I
i:J 'ta (.;
34
30.0 fps
1.1 s
f.<I.
Copie o objeto usado (MovieClip).
Agora peça um novo arquivo, e cole-o no stage crie um novo layer de
ActionScript, volte ao arquivo anterior, o qual contém aanimação peça o copy
molion as XML, selecione novamente o novo arquivo lia. peça o painel de
Aclions e cole o XML
oobjeto XML não está armazenado em variável alguma. precisà[TIos fazer isso
manualmenle. vamos pegar como exemplo. o código abaixo eassocia-lo a
uma variável do Ilpo XML de nome moveShape xml
var mo v eS h a pe_xml:XML = <Motion d u ra t i o n ="30"
xmlns="fl.moti on.·" xmlns:geom="f l a s h. geom.·"
xmlns:Eilt ers =HEl a sh . filters.·" >
<so UL'ce >
cSo urce frameRate="30" x =" 9 3" 1' ="157.5"
scaleX ="l" s c a leY ="l" rotation="O"
elementTyp e= "mo vie cl ip" instanceName ,·, " moveShape"
symbolName="Symbol 1">
e dimensions>
>,
"
ENG
cgeom:Rectangle left="O"
t op =" O" width="7S" height="47"/>
c /dimensions>
c transformationPoint>
e geom:point x="0.5" y="0.5"/>
c/t ransformationPoint>
c /Source>
c/sou rce >
c Keyfr a me inde x=HO" rotateDirection="cw"
r otateTimes= Hl" tw ee nSnap=Htrue H tweenSync=Htrue">
cS i mp l eEase ease =Hl" />
</ t\o,leens>
e/Keyframe>
c/ Ho t ion>
CLASSE ANIMATOR ECLASSE MonONEVENT
Precisamos agora dar vida a essa animação. a classe ulilizada será a
Animator. que eslá no pacole fI. motion.
o conslrulor desseobjeto nos pec1irá o objelo XM L e a inslância a ser
animada. Que deve ser do tipo display objecL
A classe Animator aplica um XML descritivo de um tween motion a um
display object. As propriedades de métodos da classe Animator controlam
como é executado o filme. e o Flash Player dispara eventos em resposta a
alterações no status da animação, como. por exemplo. ele pausa, inicia.
finaliza. A classe Animator é principalmente usada pelo Copy Motion como
um comando ActionScript no Flash CS3. Você pode editá-lo usando a
application programming interface (APl) ou construir sua própria animação
customizada.
Se você planeja chamar métodos da classe Animator com uma fun ção.
declare a inslância do objeto Animator fora da função do escopo do objeto.
Se você declarar a inslância com uma função. o Flash Player apagará a
instância Animator assim que a animação acabar, isso é parte da 'rotina do
"garbage collection" e o alvo não será animado.
ENG
Esle lópico aborda apenas o básico sobre o assunlo, para saber mais, por
favor. consulle a referência.
;íf.<"
Devemos agora importar a classe Animalor e a classe MolionEvent que
verifica o status da animação:
import El.motion,Animator;
import El,motion ,Mot ionEvent;
/'
\lar moveshape_animator:Animator = new
.
Animator(moveShape_xm l, moveShape);
moveShape animator,play();
lTOveShape_anill'ator ,add...,"VentListener (MotionEvent, HJTION_ END,
afterl'lotion) ;
function afterMotion(e:MotionSvent)
Oulros eventos devem ser consultados na referência como o MOTlON START
eo
UPOATE,
o código linal segue abaixo
import El,motion,Animator;
import El ,motion,MotionEvent;
var moveShape_xml :XI1L = <Motion duration= " 30"
xmlns=Mfl.motion,·M xmlns:geom="Elash,geom,·"
<source>
<Source frameRate="30" x="93" y="lS7,S"
elementType=Mmovie clip" in stance Na me=MmoveShape"
symbolName="Symbol 1" >
edimensions>
egeom:Rectang l e left=MO"
top="O" width="78" height="47"/>
</dimensions>
etransformationPoint>
egeom :Poin t x="O,S"
< / transforma t ionp'oint >
</So urce >
</source>
ENG
c Keyframe index."O" rotateDirection."cw"
rotateTime s="l" tweenSnap."true" tw ee nSync="true">
c tweens>
cSimpleEase ease="l" />
c.l t \-:eens >
c/ Keyframe>
<Keyframe index="29"
x="5 77.95"
y="-99
11
/>
c/Moti o n >
va r moveS hape anl mator:Anlmator • new
Animator(moveShape_xml, move Shape);
moveShape _animato r.play () ;
nc;eShape-_ anim=.tor . addEventListene r i onEvent . END,
arter-r·: o t ion) ;
fcn ction
;
ENG
Módulo 12
ANIMAÇÃO COM ACTlONSCRIPT
- Programando uma Animação
- Animação baseada na frame rate
- Alterando a frame rate
- Animação baseada em tempo
- Conclusão
.
ENG
ANIMAÇÃO COM ACTlONSCRIPT
PROGRAMANDO UMA ANIMAÇÃO
Esle capítu to abordará apenas técnicas básicas para criação de animação
com ActionScript. não veremos programação baseada em fí sica ou
tran stonnaço es de bitmaps e cores.
Para animar no Flash devemos entender como ele executa esse tipo de
instrução Uma animação em ActionScript é criada da seguinte maneira. nós
mudamos o conteúdo visuat repetidamente através da Irame rate ou através
do tempo. criando a sensação de movimento.
Existem então duas maneiras de se animar. at ravés da Irame rate. o quattodas
animaçoes de ti meline nao baseadas e outra. que é através do tempo.
podem os pensar como o setlnterva l() do javascripl.
ANIMAÇÃO BASEADA NA FRAME RATE
Para animar baseado na trame rate do Flash. precisamos do evento
Event.ENTERJ RAME. ele atualiza a tela constantemente baseado na trame
rate associada ao arquivo. Conseqüentemente avetocidade da anima ção é
dependente deta. Se a trame rate é de 10 trames por segundo e pedimos a
um objeto que se mova a 1Opx por Irame. ele percorrerá 100 pixels por
segundo. assim como se o registrarmos com lima trame rate de 30 o objeto
percorrerá 300 pixels por segundo.
10 pixels x 30 trames por segundo = 100 pixels por segundo.
Devemos lembrar que este tipo de animação varia muito de máquina para
máquina. a an imação dependerá do pro cessamento de renderização no Flash
Player no monitor. outros programas abertos ao mesmo tempo podem
também atrapal har sua performance.
import flash.display.Sprite;
import flash .events .Event ;
var quadro:Sp rit e
new Sprite();
var xAngle:Number
var yAngle:Numbe r
o;
o;
var xSpeed:Number
.13 ;
var ySpeed:Number
.09;
ENG
var xRadius:Number
100;
var yRadills:NlIrnber
50;
quadro.graphics.beginFill(Ox9 90000) ;
quadro.graphics.drawCircle(O,
O,
25);
quadro.gr aphics .endFill() ;
quadro.x
O;
quadro.y
100;
addChild(quadro) ;
addEventListener (Event. ENTER FRAJ'lE, o nEnterFrame);
Eunction onEnterFrame(e :Svent) :void {
quadro.x
quadro.)!
xAngle
+=
200 + r.1ath. sin (xJ..ngle)
* xRadius;
200 + r-lath. cos\yF-11g1e ) • yRaciius;
xSpeed;
yl\.ng 1 e + = ySpeed;
ALTERANDO A FRAME RATE
Em ActionScript 30 podemos alterar a frame rale a qualquer momento.
podemos lazer isso através da propriedade frameRate. contida l1a propriedade
slage.
stage.ErameRate
valor;
import flash.events.MouseEvent;
import Elash .even ts.E ve nt;
fpsIO.addEventListener(MouseEvent.CLICK,
onClick);
Eps50.addE vent Listener(MouseSvent .CLICK , onClickl;
fpsI00. addEve ntListener(Mouse Even t.CLICK,
onClick) ;
function onClick(e :MouseEvent) :void {
iE(e . curren tTarget . name
stage. frameRate
=
==
"fpsIO·) (
10;
}else iE(e.currentTarg et.name
stage. frameRate
=
50;
}else if(e .currentTarget.name
stage .frameRate
quadro.x
20;
=
"Eps50·) {
100;
"fpSIOO") {
ENG
addEventListener (Event. ENTER_FRAl'1E, anima);
function anima(e:Event) :void {
quadro.x +=
(680 - quadro.x)/lO;
campo.visible
!campo.vis ible ;
=
if(quadro.x >= 670){
campo.visible
=
true;
removeEventListener(e.type,
arguments.callee) ;
ANIMAÇÃO BASEADA EM TEMPO
Para criar uma animação baseada em tempo. criaremos instâncias da ctasse
Ti mer. do pacote flash. uti Is.
Essa animação é baseada em intervalos de tempo, para jogos olerece maior
estabilidade que o enter Irame, porém. consome muito mais memória. o uso
descentralizado deste objeto pode causar enormes danos ao seu objelivo.
o evento responsável pela anrmàção em si é o TimerEventTlMER, criaremos
um simples código abaixo.
import flash.utils.Timer;
import flash.events.TimerEvent;
impo rt flash .d isplay.Sprit e;
var quadro:Sprite
=
new Sprite();
quadro.graphics.beginFill(O) ;
quadro.graphics.drawRect(O, 0, 70 , 70);
quadro .graphics.endFill() ;
quadro.x
O;
quadro.y
200;
add Child(quadro) ;
var timer:Timer
=
new Time r(50, O);
timer.addEventListener(TimerEvent.TIMER, onTimer);
time r. start () ;
function onT imer(e:TimerEvent ) :void
quadro.x += 10;
e.updateAfterEvent() ;
ENG
ir (quad ro .x
>=
300) (
e.curre ntTarg e t .s t op() ;
Dentro do construtor o objeto timer nos pediu delay e repeatCount. onde
delay é o tempo em que ele executa cada chamado e repeatCount o número
de vezes que ele executará esse timer.
Também poderíamo s usar da seguinte maneira:
timer.delay :
50;
timer . repeat:Co unt
o;
Para iniciar o limer utilizamos o método startO
o updateAflerEvent() foi usado para que o Flash Player 10rçasse a
renderi zação do quadro mais rápido na leia.
Quando o quadro cheg a na posição de 300 pixe ls no eixo horizontal. o objeto
timer chama o método stop().
import fl a sh. c e xt. TextFi e ld;
import flasil . texc.Te xtFieldAu toSize;
import Elash.utils. Timer;
import flash.Eve nt s .TimerEve nt;
va r ca mpo:TextFie ld
=
new Te x tFi eld();
campo.autoSize = TextFieldAutoSize.LEFT;
campo.x = campo.y
=
200 ;
addChi ld (campo) ;
var timer :Timer = new Timer(50, O);
timer.addEventListener(TimerEvent.TIMER, onTimer);
timer.start() ;
var palavra:String
" Act i onScript
Fla s h CS3.";
var coun t:int
o·
fun c ti on onTimer(e:TimerEvent) :vo id
if(count == palavra.length1
l
e . currentTarge t.stop() ;
.0, Adobe
EI\J6
campo.text
pa Lavr a . subs tr (O , c oun t );
count+-+ ;
CONCLUSÃO
Ao criar animaçõesvia AclionScript, tente sempre cenlralizar sua
programação numa única classe, para que assim você use menos memoria
da máquina do usuáno. lornando assim uma experi ência mais gralili cante
Exisle uma sé rie de classes pronlas na inlernel que prove m essa lacllidade ao
programador.
"
•.
to·
...
"
,.
.
1'<
ENG
ACT'ON SCR'PT :3 - LEVEL:3
www.e ny.com .br
, Adobe
..
Módulo 13
DETECÇÃO DE COLISÃO
Detecçao de co lisão baseada num ponlo
Detecção de co li são baseada num objeto
iii
ENG
DETECÇÃO DE COLISÃO
Para verificar uma co li são simp les. temos dois métodos:
DETECÇÃO OE COLISÃO BASEADA NUM PONTO
pubIi e funetion hitTestPoint (x:Number, y:Number,
s h apeFlag:30o l ean
=
false) : Boolean
Ava lia-se um display objecl intersecta um ponto especificado pelos
paràmelros x e y
Os parâmetros x e y especificam um ponto no espaço de coorDenada no
Stage. não ao display object container que contém o display object (a menos
que o display objecl conlainer seja o Stage)
import fla s h.di s play.McvieClip;
imp ort fl?sh.geom .CclorTransform;
impo r t
El as h .events .MouseEvent;
var quadro_mc: Movi e Cli p
getChildByName("quadro·)
as t/lo'·/ieClip ;
colis a o!
i
var meu Co l orTransform:ColorTransform
new
ColorTranstorm() ;
meuColorTra nsform.color
Ox990000;
var old:ColorTransform =
quadro_me.tr a nsform.eolorTransform;
var subltem:Quadro
ne l'l Quadro();
subltemeuttonMode
true;
subltem.addEventListener(MouseEvent.MOUSE OVER,
over) ;
subltem. addE ventListener(MouseEvent.MOUSE_OU'T,
out; ;
funetion co lisao (e:i'louseEvent) :void (
if(quadro_ mc.hitTes tPoint(mouseX, mouseY,
true)) (
quadro_me.getChildAt(O) .transform.eolorTrans\5rm
meuColorTr ans form;
O
_III
ENG
ACTION SCRI·PT ;9 - LEVEL ;9
www.eng.c om.br
, Adobe
i f(!qu adro_me .eont a i ns(su bltem» ) {
qu adro_me.addCht l dls ubltem ) ;
suo lt e m .y
sub lt em.helg ht ;
e ls e {
quadr o_mc.ge tChildA t(O) .transform.eolorTrans f orm
old ;
iE(quadro_me . eon t a in s(s u bl tem)
{
quad ro _ me .remove Child(subltem) ;
funetlon over (e:Mou seEve nt) :vol d
e .currentTa rge t
alpha
.S;
fu oetion out(e :fvlous e Ev ent ) :void
e.cu rrent Target. alpha
1;
DETECÇÃO DE COLISÃO BASEADA NUM OBJETO
pub lic function
hitTes t Ob j ect (obj:Di spl ayObject) :Boo l ea n
Avali a-se o display objecl intersecta com o display object obj.
i mpor t
El as h. disp l ay.MovieClip;
import flash.di sp lay Di sp l ayOb ject;
import fla sh.events .Mou seEvent;
var quadro_m c: Mov ieClip
getChildByName("quadro
H
)
as t'lovieClip;
va r qua droArrastavel me:Mov leCll p getChil dByName("qua droArra stave l")
as MovieCli p;
quadrOArTas t avel_me. adcL"'ventListener (MouseEvent .t'DUSE_ COWN,
down ) ;
quadroArrastavel_me. addEvent Lis.tener up) ;
f unction down(e:i'louseE v ent) :void {
. fvlOUSE_UP,
. . . , :.
ENG
ACT'ON SCR'PT <I - LEVEL <I
www.ell9-com.br
rli
·m
AU1HORIZED
Adobe
e.currentTarget.startDrag() ;
setChildlndex(e.eurrentTarget as
DisplayObject, numChildren - 1);
e.currentTarget.addEventListener(MouseSvent.MOUSE_MOVE,
move);
function up(e:Mous eEvent) :void {
e .curr e ntTarget.stopDrag() ;
e. currentTarge t . removeSventListener (MouseEvent . t·lOUSE_1'10VE,
move) ;
if (e. currentTarget .hitTestObject (quadro_me) ) {
e .eurrentTarget.x
quadro mc.x + 10;
e.currentTarget.y
quadro_m c.y + 10;
funet ion move (e: !VlouseEvent) : void {
e.updateAEterEvent() ;
ENG
Módulo 14
MANIPULANDO OTECLADO
- Cla sse Keyboard
- Cla sse KeyboardEvent
- Detectando tec las pressionadas simullâneamenie
ENG
MANIPULANDO OTECLADO
o AclíonScripl 3.0 vem com a classe de teclado reformulada, utilizávamos
anteriormente o objelo Key, agora atualizado para tlash.ui.Keyboard. Quando o
usuário do Flash pressiona uma tecla. o ActionScript dispara dois eventos,
KeyboardEvenl.KEY_DOWN (release) e KeyboardEvenl.KEY_UP (press).
É muito comum num sistema adicionarmos teclas de atalho para que o
usuário que se sente mais à vontade possa uti lizar desses recursos para
acelerar sua tarefa. os objetos citados acima nos permitem saber se atecla
Caps Lock ou Num Lock está ativada assim como saber se qualquer outra
tecla 10i pressionada ou eslá ativa.
CLASSE KEYBOARD
capsLock : Boole an
[ static]
[read -onlyl Retorna se a tecla Caps Lock
está a tiva (true) ou não
ífalse).
numLock : Boolean
[staticl
[re ad -onl y l Retorna se a tec l a Num Loc k
está ativa (true) ou não (fa l sel.
CLASSE KEYBOARDEVENT
charCode : uint
Contém ovalor do código do caractere Que foi pressionado no teclado.
ctrlKey : Boolean
Indica se a lecla Contrai está sendo pressionada nesse momento (true) ou
não (Ialse).
shiEtKey : Boolean
Indica se a tecla Shift está sendo pressionad a nesse momento (true) ou não
(lalse).
Exemp lo
import Elash.ui.Keyboard;
import flash.events.KeyboardSvent;
stage.addEventList81er(KeyboardEvent.KEY_DOWN,
keyDown) ;
ENG
ACTION SCR.PT li - LEVEL li
V1ww.eng.com.1n
·111
AUTHORIZED
function keyDown (e: KeyboardEvent) :void
tracei "Tecla pressionada:",
String.frornCharCode(e.charCodel,
" (codigo do
caractere:", e. charCode , "I");
(Keyboard.nurnLock && Keyboard.capsLock)
ii
trace("numlock e capslock ativos");
r et urn;
if (Keyboard.capsLock) {
trace("capslock ativa");
else if
(Keyboard.num Lock)
trace ("numlock at i va" ) ;
DETECTANDO TECLAS PRESSIONADAS SIMULTANEAMENTE
Primeiramente. no painel de Test Movie, desabilite os atal hos para que
possamos testar este exemp lo:
file
."'""'"
COo'".tr'<i\-. Debug
F'I.ly
Enter
Ctrl+AA +R
.::t FOrv.,.,:,rd One: Fr ãffie
9.-:p &.::.d:,wdrd One frbroe
,
Agora. no seguinte código. criaremos uma constante que representará a letra
··s". criaremos uma cond ição verificando se o usuário pressionou conlrol + s.
import fla sh .events.KeyboardEvent;
trace("S" .charCodeAt(01)//83
con st S KEY
=
83;
stage.addEventListener(KeyboardEvent KEY_DOWN,
multiplasTeclas) ;
tunction multip l asTeclas(e:KeyboardEvent) :void
if (e.ctrlKey && e.keyCode
trace ("contro l + s ");
S_KEY) {
ENG
. ....
....
Módulo 15
EXIBINDO DATA EHORA
- Trazendo data e hora do servidor
- Retornando dados do objeto Date separadamente
. Recebendo o nome do mês e do dia da semana
. Convertendo en tre
..1e Epoch Milliseconds
EI\JG
EXIBINDO DATA EHORA
Saber como Iratar data e hora é fundamental para quem quer oferecer
serviços ao usuário. Não somente com o propósito de exibir um relógio no
site. mas para saber o tempo em que detenninado usuário executou uma
ope ração. a hora em que efefuou uma transação earmazenagem de dados.
A ActionScript armazena datas e horas internamente como epoch
milliseconds, o tempo de rni lisegundos que passaram desde - meia noite, 1
de Janeiro de 1970 no Tempo de Coordenada Universal (UTC - Coordinated
Universal Time) . para nossos propósitos é equivalente ao GMT (Tempo do
Meridiano de Greewich).
Para exibir adala e a hora, utilizamos o objelo Date. ele nada mais faz que
retornar adata e hora do usuário.
var data:Date
new DateI);
trace (data) ;
TRAZENDO DATA EHORA DO SERVIDOR
Porém nemsemp re o usuário está com seu relógio em dia. para isso
podemos trazer os dados de script de uma linguagem de servidor. como por
exemplo o PHP
<?php ec ho time() i?>
Após isso podemos trazer os dados num obj eto flash.neLURLLoader a fim de
tratar o objelo como um tipo de dado Date do próprio AclionScript.
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.Event;
var loade r:URLLoader
=
new URLLoader();
loader.addEventListener(Event.COMPLETE.
,'. .
onComp let e) ;
loader.load(new URLRequest("data. php"));
Eunctio n onComplete (e: Event) : void {
var l oader:URLLoader = e.currentTarget as
URLLoader;
var dataPHP:uint
=
var temp o:Da te
new Dat e (dataPH P
=
par selnt (loader.data)Ó
* 10));.
'/.J
«
Õ
::>
::;;
ENG
________________A_C
_ _T_I_O_N_ _S__
C_R_I_P
_T
_ _3
__-__L_E_V
_ _E_L__3__ III
trace(tempo) ;
Multiplicamos o objelo dataPHP por 1000 por causa do formato em
milisegundos,
RETORNANDO DADOS DO OBJETO DATE SEPARADAMENTE
Hora
Apropriedade hours retorna um valor entre Oe 23.
Minuto
A propriedade minutes retorna um valor entre Oe 59.
Segundo
A prepriedad e secends retorna um valor entre Oe 59.
Dia
A propried ade dale relorna um valor enlre Oe 23.
Mês
A propriedade monlh reloma um valor entre Oe 11
Ano
Apropriedade lullYear retorna um valor de qualro digites como 2008.
Dia da semana
A propriedade day retorna um valor entre O6.
var tempo:Date
new Date();
var horas:uint
tempo.hours;
var minutos:uint
tempo.m inutes;
var segundos:uint
tempo. seconds;
var dia:uint
tempo .date;
var mes :uint
tempo month;
var ano:uint
tempo. fuI I Yea r;
var d i aSemana:uint
trace(horas +
H:"
(dia + "I"
,+
trace (diaSemana) ;
= tempo.day;
+
minuto s
t
H:"
+
mes + "I" + ano);
segundos);
ENG
RECEBENDO ONOME DO MÊS EDO DIA DA SEMANA
Para associar valores numéricos avalores lextuai s corno segunda-feira,
criamos um array etrocamos o chamado do índ ice fixo pelo chamado do
valor da data aluai :
val' tempo:Date
new Date();
var horas :uint
tempo.hou rs ;
var minlltos:u int
tempo.mi nut es;
va r
tempo. secon ds;
segundos:uint
var dia:uint
temp o . date;
'lar mes:lIint
tempo.mo!lth ;
var ano :u int
tempc.fullYear ;
var diaSemana:uint
t empo. d a)' ;
'lar ar rDiasSemana:Array
"Terç a ",
"Qu arta ",
"Quinta",
var arri'leses :Array
"r'.arço",
"Abril" ,
"!'-.gosto",
"Sext a" , "Sabado");
["Janeiro",
"I'laio",
"Setembro" ,
"Dezembro"]
["Domingo" , "Segunda",
"Junho",
"Outubro" ,
+
l/Quarta,
"Julho",
"Novembro ",
i
trace (arrDiasSe mana [diaSeméma l
"
"Fever·eiro",
[mes l
+ " de
+
",
"
+ dia
+
" de
" + ano .. ".");
6 de Fevereiro de 2008.
Um exemplo completo com atualização constante na tela pode ser observado
abaixo:
p ackage {
import flash. t ext.TextFi e l d;
imp o rt flash.text.TextFieldAutoSize;
import Elash.utils.Timer;
import Elash.events.TimerEvent;
i mpo rt Elash.d i splay.Sprit e ;
p ublic class Da t aHora e xten ds Spr it e {
private va r co ntad cr :Timer ;
private va r
tempc:Date;
private va r data:TextField;
EI\.IG
private var hor a:TextF i eld;
private var meses:Array;
pub li c function DataHor a()
meses
"Abril",
[" Janeiro " , "Fever-eiro" ,
=
"r'laio",
"Junho",
"Julho",
"Set embro",
"Outubro",
"Novembro",
"Agos to",
"Dezembro" 1
data
getChildByName("data_txt")
hora
getCh i 1 dByName ("ho-ra _ txt" )
as Tex tFi eld;
as Te xtFie l d;
da ta.auloSi ze
hora.autoSize
TextFieldAut oSlz e.LEFT;
new Timer {l OOO);
contador
contador addEventLis tener(TimerEvent . TIMER,
onTimer) ;
contaàor.start(j;
onTi mer() ;
private function onTimer(e:TimerEvent
null) :void {
new Date ()
tempo
hora.text
":"
+
zeroFil l (tempo.hours)
=
zero Fillltempo.minutes)
+
+ " ."
zeroFillltempo.seconds) ;
data.text
mese s [ tempo.month)
+
"
tempo.date + " de "
de "
+
private function
zeroFi l llvalor:Number) :String
if Ivalor
>
9) {
retu rn valor.toStri ngl);O
else {
+
tempo.fu l lYear + " " .
O
ENG
return "O" + valor. toString () ;
CONVERTENDO ENTRE DMYHMSM EEPOCH MllllSECONDS
Éimportante saber converte r o formato date em diferentes formatos de
apresentação, poi s nem sempre o sistema nos traz de forma aprazível estes
valores, no exemplo abaixo a propriedade time nos retorna a data em formato
DMYHMSM (dia, mês. ano, hora, minuto, segundo. milisegundo) Ena linha
abaixo passamos no construtor um valor de tempo ao invés do ano. pedind o
em seguida seu valor. o qual retornará a data como form ato usual (epoch
milli seco nd s)
l/ar data : Date
ne\·, Date{2008, 0 , 6 ) ;
/ / 11 99588400000
(t imeVa l ue)
trace(data.time) ;
var data2:Date
new Date(1199588400000) ;
/ISun Jan 6 OO:CO:OO GMT - 0300 20GB
trace (daca2) ;
EI\JG
__ _______C__T_'_O_N___!;_CR
____________
IPT - L_E_"E_L
__ _____
3 1JD1
Módulo16
,...... -.
CRIANDO UM CURSOR DE MOUSE
- Aplicando máscara a um objelo
- Exibindo e esco ndendo o cursor de mou se
- Criando um cursor personalizado
ENG
CRIANDO UM CURSOR OE MOUSE
APLICANDO MÁSCARA AUM OBJETO
Para aplicar máscara a um objeto utilizamos a propri edade mask, essa
propriedade é aplicável a qualquer objeto visual (Oi sp layObjecl).
Éimportanle ficar atento que a propriedade mask é aplicável somente a um
. ,,' ".
;-(.
objeto , diferente do seu uso na timeline durante a criação, momenlo em que
podemos aplicar um amáscara a n objeto s.
Para remover a máscara de um objelo aplique ao valor da propriedade mask o
valor nul!.
impore Elash .d isplay .MovieClip;
import flash.events .Mo useEvent;
var a mc : MovleCllp
getChildByName( " a") as
NovieClip;
var b_mc :Mov i eCl ip
getC hildBy Na me("b") as
!'-lovieClip;
var c_mc : Mov i eClip
get ChildByName("c") as
MovieClip ;
IIAplicando mascara ao objeto a mc
a mC.mas k
D me;
stage.addEve nt Listener(MouseEvent.CLICK , setMaskl;
fun ction setMask(e:Mouse Event) : void {
l/sobrescrevendo a mascara do obj eto a mc
a mC.mask
c _mc;
EXIBINDO EESCONDENDO OCURSOR OE MOUSE
Para esconder o cursor cio mouse, chame o mélodo esláti co hide() da classe
flash. ui .Mouse.
Para exibir o cursor do mouse. chame o método estático show() da classe
lIash.ui .Mouse.
import flash.ui .Mous e;
Mouse.hide() ;
ENG
CRIANDO UM CURSOR PERSONALIZADO
Para criar um cursor basicamente precisamosesconder o mouse eaplicar a
um ob jeto visual o stariOrag() para que ele se torne o nosso ponteiro
customizado.
No exemplo abaixo faremos isso de maneira um pouco mais complexa,
arrastaremo s dois objetos ao mesmo tempo
110
stage. sendo que um deles
aplicará máscara aimagem de fundo. Um detalhe importante nesse exemplo
éque o método startOrag é ap licável aapenas um ob jeto por vez, o segredo
será associar o x e o y do seg undo objeto arrastável a posição x e y do mouse
(mouseX e mouseY).
Uma outra tarefa Que realizaremos será esconder o cursor quando o usuário
lentar pressionar o clique direito do mouse
import flash.display.McvieClip;
impo rt flash.ui.Mouse;
import flash.events.MouseEvent;
import flash.events.Event;
var image:MovieClip
var mouseCursor :MovieClip
getChil d3yName("curs or") as Novi eCl i p;
var mascara:S prite
=
new Sprit e ();
mascara.graphics.beginFillIOl;
mas ca r a. graphi cs . drawRcundRect ( - 1 00,
200,
-100,
50);
mascara.graphics.endFill ();
addCh ild(mascara) ;
image.mask
=
mascara;
mas ca r a .startDrag(true) ;
stag e.addEventLlstenerIMous eEvent.MOUSE
move) ;
Mouse .hide () ;
stage.addEventListener(Event.MOUSS_ LSAVS,
apaga Cursor) ;
function apagaCursor( e:Event) :vo id
200,
as
ENG
f"1 ouse. hide ()
function move (e:MouseEvent) :void (
mous e Cursor.x
mouse X -
moUSeCU 1"SOr . y
mouseY;
mou seCursor .·.-,idth /2 ;
- mouseCursor.height/2
e. upd ateAfte rEvent () ;
move (ne ... MouseEvent (Mous eEven t . MOUSE_fvIOVE)) ;
ENG
Módulo17
UTILIZANDO FILTROS
- Criando e Aplicando Filtros
- Aplicando Filtro a um DisplayObject
- Removendo um Filtro de um Di splayObject
- Classe BlurFilter
- Classe DropShadowFi lter
- Classe Co lorMatrixFi lter
ENG
UTILIZANDO FILTROS
Filtros são parte importante para aplicação de efeitos visuais. afim de
proporcionar ao usuário uma maior riqueza vi sual. Aaplicação de fillros é
originalmente feita por softwares especializados em edição de imagens como
o Adobe Photoshop S: e o Adobe Fireworks?
o ActionScript 3. 0 pOSSUI diversas classes para aplicação de filtros. contidos
no pacote flash.filters. onde uma séne de filtros podem ser encont rados.
permi tindo ao desenvolvedor ap licar filtros em tempo de execução. esses
flttros podem ser apticados a disptay objects e bitmaps.
Um dos caminhos de adicionar riqueza visual ao projeto é aplicar simples
efeitos gráficos a objetos. como um drop shadow por Irás de uma foto
criando uma Ilusão de 3-D. glow em volta de um botão quando ele está alivo
o ActionScript 3.0 possui nove filtros que você pode aplicar em uma
instânCia dlsplay object ou uma instância BitmapData Alguns dos filtros são
básicos. como drop shadow e o blur. que permitem criar efeitos padronizados
em suas funções. porém. existem fillros complexos que permitem a criação
de diversos efei to s como embossing. edging e sharpness como o fillro
displacement map e o filtro convolulion.
Bevel fi lter (BevelFiller class)
Blurfi lter (B lurFiller class)
Drop shadow filter (DropShadowFil ter class)
Glow filler (GlowFilter class)
. Gradient bevel filler (GradientBevelFilter class)
Gradient glow filler (GradientGtowFilter class)
Calor matrix filler (ColorMatnxFilter class)
Convolution filler (ConvolutionFiller class)
Displacement map filler (DisplacementMapFiller class)
CRIANDO EAPLICANDO FILTROS
Cada filtro é definido como uma classe. então aplicar liltros envolve a criação
de instâncias de objetos de filtros. isso não é diferente de qualquer
constnução de outro tipo de objeto.
Uma vez criada a instância de um filtro. você pode facitmente aplicá-lo
usando a propriedade fil.t ers no caso de um display objecl. No caso de um
BilmapData. use o método applyFilter().
'
.
';.:.. ENG
www.enq.c om .br
ACTION SCRIPT 3 - LEVEL 3
""1 Adobe
import flash.filters.DropShadowFilter;
var filtro:DropShadowFilter
=
new
DropShadowFilter() ;
APLICANDO FILTRO AUM DlSPLAYOBJECT
import flash.filters.DropShadowFilter;
var filtro:DropShadowFilter
=
new
DropShadowFilter() ;
meuDisplayObject. filters
[filtro];
REMOVENDO UM FILTRO DE UM DISPLAYOBJECT
lmport flash . filters.DropShadowFilter;
var filtro:DropShadowFllter
=
n ew
DropShadowFilter() ;
[filtro] ;
meuDisplayObject.filters
//Removendo em seguida
null;
meuDi splayObject . filters
CLASSE BLURFILTER
Aclasse BlurFilter mancha. ou embaça. um disp lay objecl e seu conleúdo.
Efeitos de Blur são úteis para ter a impressão que um objeto está fora de toco
ou para simu lar movimento rápido, como em um motion blur. Configurando a
propriedade quality do filtro blur para baixa, você pode sim ular um efeito de
lentes fora de foco suavemente. Configurando a propriedadequalily para alto
o resultado é um suave efeito blur similar a um Gaussian blur.
oseguinte exemp lo cria um círculo usando o método drawCircle() da classe
Graphics e ap lica um filtro blur a ele:
import Elash.display.Sprite;
impor t
fl as h.filters.BitmapFilterQua lit y;
import flash . filters.BlurFilter;
II Desenhamos um círculo,
var redDotCutout:Sprite
=
new Sprite() ;
redD otCutout . graphics.lineStyle () ;
redDotCutout,graphics.beginFill(OxFFOOOO) ;
..
0°,,..___
EI\JG
redDotCutout.graphics.drawCircle(145, 90, 25);
redDotCutout . graphics. endFi 1]
( ) ;
/1 Adiciona o circulo na display list
addChiId(redDotCutout) ;
/1 Aplica o filtro blur ao círculo
var
new BlurFilter();
bIu!". b lurX
blur.blurY
10;
10;
blur.quality = BltmapFllterQuality.MEDIUM;
redDo tCutout (ilters
tblurJ;
CLASSE DROPSHADOWFILTER
Drop shadows dão a impressão que há uma fonte de luz separada situada
aClnla do obleto alvo A posição e a intensidade dessa lonte de luz podem ser
modrlicadas para produzir uma variedade de diferentes efeitos drop shadow
o fi Itro drop shadow usa um algorítimo que é similar ao algorítimo do filtro
blur. A principal diferença é que o liltro drop shadow filler tem um pouco
mais de propíiedades que vocé pode modificar para simular diferentes
atributos de fontes de luz (assim como transparência. cor. balanceamento
e brilho)
o liltro drop shadow também permite aplicar customizadas opções de
tran sformações no estilo do drop shadow. incluindo sombras dentro ou fora e
modo knockout (também conhecido como tirar lora)
o seguinte código cria um quadrado eaplica um filtro drop shadow a ele
import Elash.display.Sprite;
import Elash.filters.DropShadowFilter;
II Desenha um Quadrado.
var boxShadow:Spri te
=
new Sprite();
boxShadow.graphics.lineStyle(l) ;
boxShadow.graphics.beginFill(OxFF3300) ;
boxShadow.graphics.drawRect(O,
boxShadow . graphics.endF ill() ;
addChild(ooxShadow) ;
o, 100, 100);
EI\.IG
www.eng.com.br
ACTlON SCRIPT
r,,"1 3-
LEVEL
3·11.
Adobe
1/ Aplica o filtro drop shadow ao quadrado,
var shadow:DropShadowFilter
new
DropShadowFilter() ;
shadow,distance
=
10;
shadow.angle = 25;
II Você também pode aplicar outras propriedades, assim como cor da
sombra,
II alpha. quantidade de blur, slrenglh, qualily, eopções para
II inner shadows e efeitos knockouL
boxShadow,filters = [shadow];
CLASSE COlORMATRIXFILTER
A classe ColorMalrixFi Iter é usada para manipular valores de cor e
Iransparência de objetos. Isso pemnite criar mudanças de saturação, rotação
de cor (mudar um alcance de uma pai ela de cores a outro) alterações de
luminosidade, e outros efeitos de manipulação de cores usando valores a
partir de um canal de cor e potencialmente aplicando então a outros canais,
Conceitualrnente, o filtro vai através dos pixels na imagem fonte uma por uma
e separa cada pixel para dentro de seus componentes vermelho, verde, azul e
alpha, Ele entao multiplica valores providos na cor matriz por um cada desses
valores, adicionando os resultados juntos para determinar o valor da cor
resultante que será mostrada na tela para aquele pixel, A propriedade matrix
do filtro está numa lista de 20 números que são usados para calcular a cor
final, Para detalhes do algorílimo especifico usado para calcular os valores de
cor. consulte no help a propriedade matrix da classe ColorMatrixFilter em
AclionScripl JO Language and Components Reference.
Oulras informaçôes e exemplos do fillro colar malrix podem ser enconlrados
no artigo "Using Malrices for Transformalions, Colar Adjuslments and
Convolution Effecls in Flash" no web sile Adobe Developer Cenler.
ENG
www.eng.com.br
ACTION SCRIPT
Adobe
Módulo 18
APLICANDO FULLSCREEN
- Alinhando o conteúdo do stage
- Alterando aexibição do slage
- Definindo aqualidade de exibição do SWF
- Retomando o tamanho do stage
- Aplicando FullScreen ao s!age
a -
LEVEL:3
II
ENG
APLICANDO FULLSCREEN
ALINHANDO OCONTEÚDO 00 STAGE
Para alinhar o conteúdo do palco. utilize a propriedade align ligada a
propriedade slage. que represenla a classe Stage no AclionScripl 3.0.
BOTTOM : Stri ng
=
"B"
[slalic] Espec ifica que o Stage é alinhado ao rodapé
BOTTOM _ LEFT : Str ing
"BL"
=
[static] Especifica Que o Slage é alinhado no canlo inferior esquerdo.
BOTTOM_PIGHT : String
"3R"
[slatlcl Especillca que o Stage é almhado no canto 11!er lO r direito
LEFT . Str ing
IstatJc]
"L"
Especif icaque o Stage é almhado a esquerd,L
RIGHT
S tring = "R"
[slalí c] Especifica que o Slage é alinhado a direita
TOP
String = "TU
[stalic] Especifica que o Stage é alinhado ao topo
TOP_LEFT : String
"TL"
=
[sla tic] Especifi ca que o Stage é alinhado no canlo su perior esquerdo.
TOP
RIGHT : String
=
"TR"
[slalic] Especifica que o Stage é alinhado no canlo superior direilo.
import flash.display.StageAlign;
stage.align
=
StageAlign TOP_L EFT;
ALTERANDO AEXIBiÇÃO DO STAGE
Especifica como usar o modo de escala do slage.
EXACT FIT : String
=
"exactFit"
[stalic] Especifica que a aplicação Adobe E Flash R inleira será visível na
área especificada sem tentar preservar a relação de aspeclo original.
ENG
NO_BORDE R : Stri ng = "noBorder"
[static] Especifica Que aaplicação em Flash inteira ira preencher aárea
especificada, sem di storção, mas possivelmente com algum corte. enquanto
mantém a relação de aspecto original da aplicação.
NO_SCALE : Str ing
=
"noScale "
[static] Especifi ca que o tamanho da aplicação em Flash será fixada. então ela
permane ce imutável mesmo conforme o tamanho da tela de player mudar.
S HOW_ALL : String
=
"showAll"
[stalic] Especifi ca Que aaplicação em Flash inteira será visível na área
especificada sem dislorção enquanto mantém a relação de aspecto original
da aplicação.
import f l ash.dis play.StageScaleMode;
stage. sca leMode
=
StageSc alei'lode. NO_ SCA LE;
DEFININDO AQUALIDADE DE EXIBiÇÃO DO SWF
o valor que especifi ca como renderizar (interpretar) a qualidade do Flash
Player para o usuário final
BEST : String
=
"best"
[static] Espec ifi ca qualidade de interpretação como muito alta gráficos são
suavizados usando uma grade de 4 x 4 pixe l e bitrnaps sempre serão
suavizados.
HI GH : String
=
"high"
[static] Especifi ca qualidade de interpretação como alta gráfico s são
suavizado s usando uma grade de 4 x 4 pixel e bitmaps são suavizados se o
film e é estático.
LOW : S trin g
=
"Iow"
[static] Especifi ca qualidade de interpreta ção como baixa: gráficos nao são
suavizados. e bitmaps não são suavizados.
: String
=
" medium"
[static] Especifica Qualidade de interpretação como media: gráficos são
suavizados usando uma grade 2 x 2 pixel . mas bitmaps não são suavizados.
import fla s h.display.StageQuality;
stage.quality
StageQuaIity.BEST;
ENG
RETORNANDO OTAMANHO DO STAGE
Para retornar a largura do stage. utilize a propried ade stageWidth.
Para retomar aaltura do stage. utilize a propriedade stageHeight.
import flash.events.Event;
stage.addEventListener(Event.RESIZE. onResize);
cnResize() ;
fun ction onResize(e:Event - null) :vcid
trace (stage. 5 tageWidth ) ;
trace(stage.stageHeighi;
APLICANDO FULLSCREEN AO STAGE
A. propriedade displayState define como exibir o s\\1 para os usuários. silo
duas possibilidades, NORMAL e FULLSCREEN. Um detalhe importante é que
textos do Upa input text não recebem entradas de texto Quando no modo
fullscreen.
FULL_SCREEN : String - "EullScreen-
[sta licl Especifica Que o Stage deve estar em modo fullscreen.
NORMAL : String - "norma l-
[slaticl Especifica Que o Slage deve eslar em modo normal.
import Ela s h.display.StageDisplayState;
import flash . events.MouseBvent;
stage.addEventListener {Mou seSvent.CL ICK . onClickl;
function onC lick(e:MouseSve n t) :void
I
stage.displayState = (st age.displa yState
StageD ispl ayS tat e. NORMAL) ?
St ageDisplayState.FULL_SCREEN
StageDi splayState.NORMAL;
Para que o código acima funcione. é necessário que o hlm l também seja
alterado em Irês partes, ambas permitindo o uso do full screen para Irue.
ENG
<htm l xmlns=" http://w,,,'w . w3 . org/ 1 9 9 9 /xht ml"
xml:lang="en" l a ng="en" >
<h ead>
<meta http- eq uiv="Content - Type" conte n t=" text/
html; charset=iso-8859-l " />
<titl e> fulls creen c/ ti tle>
<sc ript l a nguag e="j avascript">AC_FL RunCon tent
O; e/sc ript >
escri pt SlT=" AC_RunAct i veContent . j s"
l a ngu age=" j avascr ip t " >c/scr ipt >
e/hea d >
ebody bgcolor="#EEfEEE">
e !- url's used in the mcvie - >
e ! - t ext used in the movie->
C ,-
saved Erom url= (00 13) about: internet
>
cscr i pt l anguage= "javascr i pt" >
if
(AC FL RunContent == O)
alert (" Th is page requires
AC Run.'''ctiveContent. j s ");
e l se {
AC FL RunCc nt ent(
'codebase',
'htt p://
downl oad.macrome dia.com/pub/ shock wave! c ab s!flash!
s wEl as h .cab #ve rs ion=9,O,O,O' ,
'width',
'100 %'
'height',
'src',
'100%',
'Eull screen'
'qualit y',
'h ig h ' ,
'pIuginspage' ,
'http: //
www.macromedia . com/ go/getEla s h player· ,
'align',
'middl e '
'play',
'tru e',
'Ioop ',
't r u e' ,
\ scale',
\ nos ca l e '
' vlTnode',
'V\l
indu '.tJ ',
'dev i ce tont ',
'id',
. Ea 1 se ' ,
' fullscr een ' ,
'bgcolor',
'Uf ffEff',
'name',
'ful lscreen ',
'me nu ' ,
'tru e ',
\ true' ,
' a llowS cr iptAccess ', ' sa meDo ma in ' ,
'mov ie',
'salign' ,
'full sc r ee n',
ENG
ACTION SCRIPT 3 - LEVEL 3
www.el1g.com.br
AUTHORIZED
); Ilend
AC code
c/script>
c noscript>
cobject c l ass id7"clsid:d27cdb6 e - ae6d -ll cf·
96b8 -4445 53540000 " codebase="http://
download.macromedia.com/pubjshockwave/cabs/flashl
swf la sh.cab#version =9,O,O,O" width="lOO%"
height:"lOO%"
<param
value="sameDomain" I>
<param name="allowFullScreen" value","true" I>
<param name="movie" value="fullscre en.swf" /
><param
value="high" !><param
value ="nosca le" I>cparam
name="bgcol o l·" valuE'="tltffEEf" I>
<embed
src 7 "Eullscreen. sw [" qu a lit y="h igh" scale="nosca l e"
bgcolor="NffffEf" width=" l OO%" height="lO O%"
name="Eu l l scr een" a li gn="m iddle"
a ll owScriptAccess="sameDoma in"
allowFullScreen="true" type="app lication /xshockwave-flash" plugihspage= "http://
'ti h"" .
macromedia . com/go/get flashplayer" / >
c/object >
</noscript >
cjbody>
</html>
Um exemplo complelo seg ue abaixo. crie num arquivo .lIa dois MovieClips
de nomes quadro e círculo. em seguida crie a seguinte classe para ser
associada ao Documenl Class.
package {
import Elash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.display.StageQuality;
import flash.d isplay.StageDisplayState;
import flash.di sp l ay.Sprite;
import flash.di sp l ay.MovieC lip;
import flash.eve nts .Event;
import Elash.events.MouseEvent;
public class FullScr e en ext ends
ENG
priva te var circ:Sprit e;
pri v ate var quad:Sprite;
public function Ful1S cree n()
stage.align
StageJl.l i gn. _LEFT;
stage. sca StageScaleMode.NO_SCALE;
s tage. quaU t y
StageQuallty.BEST;
stage.addSventListener(Event .RESTZE, onRes ize ) ;
Clrc
gelChildByNamel" c irculo H
quad
gelCIH ldByName ( "quadro")
as
)
as
j·1C\"l eCl.l p,
q u ad . out tru e i
o nCl ickl ;
onResize () ;
pr iva t e function o nRe s i zele:Eve nt
null}:void {
circ.x
stage . stageWidth I 2 -
circ.y
stage.stageHe ight I 2 -
circ.width I 2;
circ.height I 2;
quad.x
stage . s t age Width -
quad.y
stage.stageHeight -
quaà.heigh t;
private f unction
o nClick(e:MouseEvent) :void
stage.displ ayState
(stage.àisplayState ==.StageD isP.l aySta t e .NORMAL)
StageDi sp l a yState.FULL_SCREEN
StageDi sp layState.NORMAL;
'"c
5:::>
..
::;
::;
E 1\.16
'"ti
www.eng.com.br
ACT'ON SCR'PT :3 - LEVEL:3
,""-1 iii
Adobe
"';' . ";(.,-
OO
":,;(
.
ENG
Módulo 19
ACESSANDO AIMPRESSORA
- Imprimindo como um Vetor ou Bitmap
- Escolhendo entre impressão Horizontal ou Vertical
- Deleclando a possibilidade de Impressão
- Imprimindo uma página
ENG
ACESSANDO A IMPRESSORA
A classe PrintJob nos dá a funcionalidade necessária para imprimir no Flash.
PrintJob.startO
Moslra a caixa de diálogo de impressão do sislema operacional e inicia o
spooling
PrintJob.addPageO
Adiciona uma página à fila de impressão
PrintJob.send()
Envia as páginas carregadas na fila de impressão para a Impressora.
Com esta Classe podemos imprimir páginas de confmração. recibos. I!ckets.
lolos. ou qualquer oui ra coisa que necessite ser colocada no papel
IMPRIMINDO COMO UM VETOR OU BITMAP
Uma das possibilidades de melhorar a impressão no AclionScripl com
imagens é passar o parâmetro lrue dentro do construtor da classe
PrintJobOpiions o default é false.
imp ort Elash.printing.PrintJobOptions;
v a r options:Pr intJobOpti o ns
n ew
Prin t J obOp t io n s( ) ;
ESCOLHENDO ENTRE IMPRESSÃO HORIZONTAL OU VERTICAL
Para escolher como será a posição da impressão no papel. ulilize a classe
Pri ntJo bO rienlat ion.
import fla s h.printing.Print JobO ri e ntation
PrinlJobOrientalion.LANDSCAPE
Imprime horizontatmente.
PrintJobOrientation.PORTRAIT
Imprime verticalmenle.
,.;"
ENG
DETECTANDO APOSSIBILIDADE DE IMPRESSÃO
Muitas das vezes o usuário não possui a capacidade de imprimir em seu
ambiente de trabalho, ou seja. não possui impressora instalada nem em sua
máquina nem conectada a sua rede de trabalho.
Para verificar isso utilize a classe Capabilities.
import flash.system.Capabilities;
if{Capabilities.hasPrinting) {
l/Código para impressão
IMPRIMINDO UMA PÁGINA
No código abaixo veremos como imprimir realmenle um objelo Sprile ou uma
de suas classes de especialização como o MovieClip
A ordem dos métodos da classe PrintJob devem ser respeitados.
import flash.printing.PrintJob;
import flash.printing.FrintJobCptions;
import flash.printing PrintJobCrientation;
import flash.system.Capabilities;
import flash.geom.Rectangle;
import
var quadro:Sprite
new Sprite();
=
quadro.graphics.beginFill{Math.random{)*OxFFFFFF) ;
quadro.graphics.drawRect(O,
o, 100, 100);
quadro.graphics.endFill() ;
quadro.x
quadro.y
=
=
stage.stageWidth / 2 - quadro.width / 2;
stage.stageHeight / 2 - quadro.height I 2·
addChild(quadro) ;
var rect:Rectangle
stage.stageWidth,
=
new Rectangle(O,
stage.stageHeight);
var imprime:PrintJob
o
new PrintJob{);
var options:PrintJobOptions
=
PrintJobOptions() ;
if(Capabilities.hasPrinting) {
new
o,
EI\JG
,.
ACTION SCRIPT :3 - LEVEL :3 .
www.eng.com.br
DI
-I'
:1:f';
imprime.start() ;
.0:
imprime.addPage(quadro,
rect,
op tions ,
O)
imprime . o rientati a n
PrintJ obOr i e nt a tion.LAND SCAPE;
impr ime.se nd() ;
o mélodo addPage aceila os seguinles parâmelros:
largel. onde largel é o caminho do objelo a ser impresso. Ex: formularia. ficha
prinlArea (Opcional): Coordenadas Que identificam a área de impressão no
seguinle formalo:
var rect : Rec t ang le
n ew Rect a ngle(x, y , width.
height) ;
opoons (Opcional): Esla opção define se o Que será impresso será ou não
transformado em bitmap antes. Éaconsefhável Que esta opção seja alivada
em casos em Que o filme a ser im presso lem eteitos. imagen s e
transparências: senão pode manler o padrão Formato :
var options:Pr intJobOptions
n ew
PrintJobOptions ( ) ;
lrameNumber (Opcional): Oframe
do ri lme. especificado no parâmelro largel,
a ser impresso.
. .....; ..