DANIELA PIRES (86 pts)

SÁVIO PONTE (39 pts)

EDUARDO CARREGA (150 pts)

RODRIGO AMARAL (56 pts)

RICARDO FIGUEIRA (33 pts)

JOÃO NETO (78 pts)

DENIS CARAVALHO (85 pts)

ILVA RUDEV (90 pts)

ALEXANDRE PORTO (1281 pts)

IRAPUAN MARTINEZ (45 pts)

GUILHERME SCHEIBE (49 pts)

AMAURY BENTES (123 pts)
Treinamento PontoFlash de Flash e ActionScript

Como esconder o menu do Flash Player MX?

Como fazer uma arma móvel atirar um projétil verticalmente?

Quando fazer um CD ROM em Flash?

Como alterar dinamicamente o tipo e o background de um campo de texto?

Uma variável é uma propriedade? Não deveria ter um “undersore”?

Importei um .MOV pro flash, só que quando testo, o vídeo não começa.

Como carregar, via load Movie, um filme num determinado local (X,Y) do filme?

Quero usar uma variável importada de um TXT numa ação do Flash.

Como deletar com unloadMovie todos os filmes menos o level 0?

Quero fazer um objeto ser arrastado e que quando soltado (stopDrag) caia suavemente.

Queria que o Flash importasse imagens de meu banco de dados.

O que é a opção Interlaced quando vou salvar um bitmap PNG?

Alguém tem um chat (de preferência .fla) ou sabe onde conseguir um?

Como posso dar uma ação a um movieclip quando outros dois se chocam?
Criando um objeto para sua paleta personalizada (NINJA)

Jogo da Forca

Efeito de texto esticado (stretched text).

Tornando movieclips arrastáveis (drag movieclip)

Line Draw.

Variáveis do servidor ASP em ambiente flash

Uma enquete usando ASP e Flash.

Variáveis no Flash MX

Desenvolvendo um Tocador de Vídeo em Flash

Envio de um arquivo SWF por e-mail

3D Wireframe.

Janelas tipo Windows com Swap Depth
Scroll text2

Natal Misc

Lightings

Giro de duende

Drag Image

Intromar

Macromedia

Load dinâmico de fotos

Regressivo

Tweeneng com alpha

Xbox f5

Gravar dados
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.