HELEN TRIOLO (444 pts)

DEMIS BUCCI (50 pts)

FÁBIO DUARTE (79 pts)

DAAFY (55 pts)

SÁVIO PONTE (39 pts)

MARLOS ALVES CARMO (90 pts)

RODRIGO AMARAL (56 pts)

KEN AWAMURA (130 pts)

DAUTON JANOTA (255 pts)

PANDOGO (82 pts)

DENIS CARAVALHO (85 pts)

JOTA LAGO (40 pts)
Treinamento PontoFlash de Flash e ActionScript

Como pegar no flash, variaveis vindas de uma URL "site.jsp?var=valor&var2=valor2"?

Como manipular a tecla tab no meu formulário no Flash MX?

Preciso rodar um AVI no flash com controladores: PLAY, PAUSE, STOP.

Alguém sabe como um link em html controlar um FlashMovie.

Porque no meu flash, 1 + 15 retorna 15 e não 6?

Tem como alinhar objetos em frames diferentes de uma vez só?

Tem como eu implementar a navegação de um filme do Flash pelos botões do browser?

Como mando um formulário sem usar banco de dados?

Aula teórica de interação flash + script.

Como colocar eventos de botão em um movieclip no FlashMX?

Como faço para parar cada cena da minha animação, esperando a pessoa teclar ENTER ou qualquer tecla?

Não estou conseguindo fazer o preenchimento gradiente no Flash5

Como redimensionar um objeto até parar em um determinado tamanho?

Quando fazer um CD ROM em Flash?
O desenho animado abrindo sites.

Labirinto - Plataforma de jogo em terceira pessoa em flash 5: 1° parte

Cadastro de usuários, com Flash+ASP

Menu Popup

Motion Guide (guia de movimento).

Perspectiva 3D no Flash

Desenhando apenas com Actionscript.

LocalConnection

Tratamento de imagens e alguns efeitos no Fireworks

Flash Studio Pro: Dando poderes ao Flash

0wn3d Again BY Destution Team

HTML no Flash 5 - A solução para formatação de textos longos.
Corrente

Planeta girando

Soundpan_f5

Luz

Random block

Preloader run

Satélite

Aleatory move

Load dinâmico de fotos

Drag menu F5

Calendário

Transição
HOME | TUTORIAIS
Shared object.
por Eduardo Walmott

Uma das grandes funcionalidades implementadas no novo Flash MX é o SharedObject. A utilidade básica do SharedObject é permitir o armazenamento local dos dados referentes a um usuário no sistema deste usuário, a exemplo de um cookie, mas melhor. Neste tutorial vamos aprender a trabalhar esta nova funcionalidade.

   Se você não consegue imaginar nenhuma boa razão para armazenar informações de um usuário, você não está se esforçando o suficiente. Podemos por exemplo, usar o SharedObject (doravante denominado SO) para determinar se um usuário visitou já seu site, permitindo que pule automaticamente a introdução após a primeira visita. E isto é só um exemplo simples, há uma infinidade de novas aplicações para esta ferramenta, possíveis de imaginar e realizar.

   A primeira coisa a fazer quando se trata de SO no Flash MX é verificar se esta funcionalidade está habilitada no lado do cliente. Isto implica obviamente em todas nossas novas aplicações, o código abaixo é para verificar se o SO está habilitado no sistema de um usuário:

function checkSO() {
// Cria uma variável e tenta armazená-la
meuSO = SharedObject.getLocal("teste");
if (!meuSO.flush(1)) {
// SO não permitido no sistema!
// Chama a janela de ajuste
System.showSettings(1);
} else {
// SO permitido
trace("O seu sistema permite SharedObjects!");
}
}
checkSO();

   Coloque o código acima em um keyframe em um filme do Flash MX e rode para certificar-se que seu sistema permite o SO antes de começarmos. Note que o código acima verifica somente se seu sistema suporta um SO de 1 byte, falaremos mais sobre isto neste tutorial, assim, se você quiser adaptar para qualquer uso modifique esta propriedade.

   Para criar um novo SO nós usamos a seguinte sintaxe:

meuSO = SharedObject.getLocal("teste"); 

   Esta mesma sintaxe é usada para carregar um SO armazenado anteriormente no sistema do cliente. Neste exemplo "meuSO" é o nome do objeto SO que trataremos no Flash e "teste" é o nome do arquivo que será armazenado fisicamente na máquina do cliente, por default este arquivo recebe a extensão ".sol". Note que por se tratar de um arquivo que vai ser gravado no cliente poderia conter acentos e outros caracteres, mas muitos não são permitidos, por isso é altamente recomendável que se use apenas caracteres comuns sem acentos. É permitido o uso de barras (\) para determinar uma pasta de armazenamento específica.

   Em qualquer ponto do seu filme depois de criado o objeto SO e desde que não se tenha deletado é possível gravar informações utilizando o método "flush", que retorna um valor booleano (true ou false) ou ainda retorna a string "pending". Quando o método retorna true, a operação foi bem sucedida e as informações foram gravadas, quando retorna false ocorre o oposto, veremos o retorno "pending" logo a seguir neste tutorial. Neste processo o arquivo físico no sistema do cliente não é criado / alterado até que o método flush seja explicitamente invocado. Vejamos um exemplo:

meuSO = SharedObject.getLocal("teste");
meuSO.data.nome = "Eduardo";
valido = meuSO.flush();

   Depois de invocado o método flush vc pode procurar na sua máquina o arquivo "teste.sol" criado neste exemplo.

   É possível também buscar o tamanho do arquivo SO gravado na máquina do usuário, o retorno é em número de bytes o método é getSize e é usado desta forma:

meuSO.getSize();

   O Flash MX permite que um usuário na outra ponta não só especifique se permite ou não SharedObjects, como também, controle o espaço em disco alocado para SharedObjects, que por default é 100k. Se a qualquer momento da sua aplicação você tentar escrever mais dados que o sistema do usuário reserva, será apresentado a janela de alerta para tal procedimento. Quando o alerta é provocado pelo método "flush" ele retornará a string "pending" antes de enviar true ou false. Analisando, vemos que nossa variável "valido" no exemplo mais acima pode não retornar um valor booleano, o que poderia causar problemas ao tentar verificar se no nosso script a operação fosse bem sucedida (através de uma verificação condicional, por exemplo). Mas para isso vamos tentar encontrar uma solução.

   Uma função definida pelo evento "SharedObject.onStatus" pode ser executada quando um valor é retornado através do método "flush". Note que esta função não é executada enquanto o retorno do método "flush" permanecer "pending" (esperando a autorização do usuário escrever em disco por exemplo), também não é executada quando a operação "flush" pode ser finalizada dentro do espaço em disco alocado pelo usuário. Desta forma se o cliente permitir que seja escrito 10k em seu disco e for solicitado escrever apenas 1k a função do "onStatus" não será disparada.

   Quando invocada esta função é criado um objeto que indica a bem sucedida operação ou falha na mesma. Segundo a documentação da Macromedia cada objeto da informação possui uma propriedade de código contendo uma string que descreve o resultado do método onStatus e uma propriedade da classe definida por uma string que pode ser: "status", "warning" ou "error". Veja a tabela abaixo fornecida na documentação da MM:

code class Meaning

SharedObject.Flush.Failed

Error

A SharedObject.flush command that returned "pending" has failed (the user did not allot additional disk space for the shared object).

SharedObject.Flush.Success

Status

A SharedObject.flush command that returned "pending" has been successfully completed (the user allotted additional disk space for the shared object).


No exemplo abaixo é usado o método "flush" ao invés da propridade da classe para fazer a verificação:
molSO = SharedObject.getLocal("mediaonline"); molSO.data.name = "Eduardo"; efetivado = molSO.flush(100000); if (efetivado == "pending") { molSO.onStatus = function(result){ if (result.code == "SharedObject.Flush.Success"){ trace("Gravado com sucesso!"); gravado = true; } else { trace("Falha na gravação"); gravado = false; } }; } else { gravado = efetivado; }

   Quando nós adicionamos dados a um SO nós especificamos se queremos manter a informação armazenada em disco através da propriedade "data" ou apenas guardar a informação temporariamente enquanto o usuário permanece com a sessão aberta. Somente os SO com a propriedade "data" serão escritos realmente em disco, SO com a propriedade "data" vazio não será armazenado. O exemplo logo abaixo cría um novo SO, o salva, deleta e logo a seguir o recarrega. O laço "for..in" gera um "trace" de todos os valores que encontrou da SO recarregada. Note que a variável "tristeSorte", que não foi incluida a propriedade "data", depois de recarregada não existirá, enquanto as outras persistirão. Note também que as variáveis preservam seus tipos de dados - Array, número, data, objeto XML, valor booleano, etc..

//Criamos a SO globoSO = SharedObject.getLocal("clone"); //Adicionamos uma informação que irá sofrer no mármore do inferno globoSO.tristeSorte = "Allah, escreveu quem não estiver na
propriedade data, será jogado ao vento! Yala!"; //Adicionamos as informações que são 'Zuina' globoSO.data.Nazira = "Eu vou dançar sobre o seu túmulo!"; globoSO.data.numeros = 123; globoSO.data.objetos = new Array(4, 5, 6, 7, 8); //Gravando em disco (Não faço a verificação neste caso) globoSO.flush(); //Deletando a SO delete globoSO; //Carregando a SO de volta globoSO = SharedObject.getLocal("clone"); //Procurando os valores da SO for (g in globoSO.data){ trace(g + ": " + globoSO.data[g]); }

   Uma coisa interessante a se notar no SO é que quando você recarrega um arquivo previamente gravado em disco faz algumas alterações e o regrava os índices do arquivo original são sobrescritos imediatamente, se for adicionado algum novo dado este é fundido com os dados que estavam gravados e mantém os dados que não foram alterados.

   Agora imagine que se deseja, após algum tempo, apagar do SO determinada chave do índice, por esta não ser mais interessante, imaginando uma situação prática, foi gravada uma informação de um número de um sorteio, depois de sorteado a informação não possui mais valor, o seu SO vai continuar com aquele número guardado, ou na melhor das hipóteses vc vai sobrescrever este dado. Na documentação da Macromedia não há referência alguma sobre este assunto, mas graças a Dave Emberton isto tornou-se possível, vamos a este exemplo baseado no teste anterior:

// Carregando a SO
globoSO = SharedObject.getLocal("clone"); // deletando as informações que não interessam mais
delete globoSO.data.numeros;
delete globoSO.data.objetos;
globoOS.flush();
delete globoOS;
globoSO = SharedObject.getLocal("clone");
// Procurando os valores da SO
for (g in globoSO.data) {
trace(g + ": " + globoSO.data[g]);
}

   Nos documentos da Macromedia também não há nenhuma referência quanto a remover fisicamente o arquivo gravado, embora teoriamente isto seja impossível o uso de duas técnicas conjuntas já vistas neste tutorial conseguiu-se este feito. Primeiro, quando nós gravamos um SO com nenhuma propriedade "data" o arquivo não é escrito. Segundo, quando nós excluímos um dado da propriedade "data" e reescrevemos a SO ele é removido do arquivo fisicamente. Então ao remover-se todos os dados da propriedade "data" e invocar o método flush, mesmo havendo um arquivo previamente gravado em disco o Player do Flash MX deve fazer a remoção física do arquivo, vamos tentar então fazer isto:

globoSO = SharedObject.getLocal("clone");
for (i in globoSO.data) {
delete globoSO.data[i];
}
globoSO.flush();
delete globoSO;
globoSO = SharedObject.getLocal("clone");
for (i in globoSO.data){
trace(i + ": " + globoSO.data[i]);
}

   Finalizando nosso tutorial, para forçar o usuário a aceitar os SO, como já foi visto na primeira parte deste tutorial, você pode invocar a janela "Settings" que está presente no menu do Player Flash MX, para isto usamos o seguinte código:

System.showSettings(1);

   Ele mostra uma pop up como a mostrada abaixo onde o usuário pode definir o espaço alocado deslocando a "slidebar" ou até mesmo não aceitar SO enquanto o checkbox "Never" estiver marcado. É interessante ter alguma ajuda para o usuário porque muitos não dominam o idioma inglês e por se tratar de uma novidade muitos clientes podem ficar receosos, dificultando o uso desta ferramenta nas suas aplicações.

   Bom galera, acho que era isso, agora é começar a bolar suas aplicações para esta poderosa funcionalidade que a Macromedia disponibilizou, espero ter ajudado e ter sido claro em minha explicações.



Devido à reformulação implementada no site, pode ser que você encontre alguns links quebrados. Por favor, ajude-nos a corrigir eventuais problemas nos informando links quebrados
1 comentário


Comentário de Gabriel
| 25/5/2010 - 08:17 |
http://www.fenixstudio.co.cc

Eduardo, Seu Tutorial me ajudou muito. Obrigado. Mas gostaria de saber em que pasta ficam os arquivos gravados pelo Shared Object. Aguardo. Obrigado.