LUI FERNANDO (151 pts)

GÉRIO (93 pts)

ZEBEDIAH (35 pts)

MARLOS ALVES CARMO (90 pts)

AMAURY BENTES (123 pts)

AUTOR DESCONHECIDO (100 pts)

KEN AWAMURA (130 pts)

ZECA BALA (45 pts)

SÁVIO PONTE (39 pts)

LEANDRO AMANO (83 pts)

LUIZ HERRERA (117 pts)

FLASHGURU (155 pts)
Treinamento PontoFlash de Flash e ActionScript

Como fazer um contador regressivo de data?

Qual a diferença entre _level e _root?

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

Como eu faço para carregar, com load movie, um swf, num ponto específico e com um tamanho específico?

Quero desabilitar os botões do _level0 (nível zero).

Um exemplo de um campo de texto formatado dinamicamente no Flash MX.

Tamanho de banners

Quero que mouse seja substituído por um mocieclip apenas num determinado local.

Como se faz o efeito de aumentar a janela popup do site www.tribal.com.br?

Utilização do Bryce 3D.

Quero localizar a posição de um movieclip dinamicamente?

Qual a maneira de colocarmos uma figura (gif) como plano de fundo em um fla?

Como posso fazer no flash MX, uma linha reta via actionscript.

Como faço para colocar uma pausa no meu filme?
Download de arquivos com a classe File Reference

Fade Out.

Controlando MovieClip pelas teclas direcionais.

Gradiente variável

O "X" do MacOS no PhotoShop

Flash e X-Technologies · A Nova Ordem do Mundo?

Jogo da Forca (terceira parte)

Tornando movieclips arrastáveis (drag movieclip)

Gravidade no Flash.

Objeto Key

Looping.

Flash Communication Server MX - Primeira Parte
Blaublau

Neve

Trailer

Fogos de artificio

Kick ball

Enquete

Rachadura

Filtro de cores

Drag tooltip

Statusload

Linhas paralelas

Bola de vidro
HOME | TUTORIAIS
Post comments (Livro de Visitas)
por Luiz Avanzi

Um tutorial da parte de script deste arquivo se fosse realmente completo mesmo iria ser exaustivo demais, então eu escolhi fazer da seguinte maneira, coloco o código todo comentado aqui, mas supondo que quem vai ler não precise que eu explique como funciona cada objeto e seus métodos e propriedades, ok?
Bom, vamos ao passo a passo...

1 - Inicialmente o mais fácil, crie dois arquivos txt à partir do seu bloco de notas. Salve-os como "comentarios.txt" e "PHPCounter.txt"

Basta isso, porque na realidade quem vai salvar as informações nestes txt são os dois php, por isso não precisa mais nada.

2 - Agora vamos aos php, serão três,
-um para ler os dados;
-um para gravar os dados;
-um para gravar a quantidade de posts.

2.1 - Lê os dados e disponibiliza para o flash:

<?php
$filename = "comentarios.txt";
$handle = fopen ($filename, "r"); //Abre, lê e transforma numa string o conteúdo
$conteudo = fread ($handle, filesize ($filename)); // do arquivo comentários.txt
$indesejado=array("&"); //identifica o caractere indesejado
$substituto=array("%26"); //identifica o caractere substituto
$novafrase= str_replace($indesejado, $substituto, $conteudo); //nesta função troca dentro da string
echo "&texto_final=$novafrase"; //o indesejado pelo substituto e cria uma nova string
fclose ($handle); //disponibiliza para o flash e fecha o arquivo txt.
?>

Salve como "le_texto_externo.php"

2.2 - Contador:

<?php
$filename = "PHPCounter.txt";
$fp = fopen( $filename,"r");
$Old = fread($fp, 100);
fclose( $fp );
$Old = split ("=", $Old, 5);
$NewCount = $Old[1] + '1';
$New = "Count=$NewCount";
$fp = fopen( $filename,"w+");
if (flock($fp, 2)) {
fwrite($fp, $New, 100); }
fclose( $fp );
echo "&Count=$NewCount";
?>
//este php eu peguei lá mesmo no ponto flash, na verdade era usado num contador de acessos
//e serviu perfeitamente para contar também a quantidade de posts feitos e gravar num txt
//para que o flash possa ler.

Salve como "contador.php"

2.3 - Grava os dados no txt:

<?php
$filename="comentarios.txt"; //identifica o arquivo
$quebra="<br>"; //crio várias strings para montar o texto com formato
$variavel = "=========================<br>"; //tags html que o flash interpreta sem probelmas
$atamanho="<font size='9'>" ; //todas estas strings vão formar uma total que é gravada no txt
$ftamanho="</font>";
$abold="<b>";
$fbold="</b>";
$handle = fopen ($filename, "r"); //le o arquivo e transforma o conteúdo numa string
$conteudo_a = fread ($handle, filesize ($filename));
$texto=$_POST["comentario"]; //recebe do flash estas tres variáveis via "post"
$nome=$_POST["nome"];
$marcador=$atamanho.$_POST["data_hora"].$ftamanho;
$mensagem = $texto.$quebra.$abold.$nome.$fbold.$quebra.$marcador.$quebra.$variavel.$conteudo_a ;
$fp = fopen($filename,w); //a string acima é o total que vai ser gravado no txt
if (fwrite($fp,$mensagem)) //atraves desta função
{die ("resposta=OK");} //se for feita a gravação dos dados envia para o flash uma resposta
else { die ("resposta=ERR");} //que vai enviar o swf para o frame especificado
fclose($fp);
fclose($handle);
?>

Salve como "grava_comentario.php"

Obs.: Entendo que talvez esta não seja a melhor maneira de fazer, mas sinto-me à vontade para publicar este arquivo,porque não entendo de php. Consulto o manual do php quando preciso de uma função e assim me basta, se algum dos amigos tiver uma sugestão de melhorar estes arquivos ou a arquitetura deles, pode entrar em contato que a sugestão será bem-vinda.

3 - Agora vamos ao flash, a estrutura do arquivo é muito simples, crie um novo arquivo flash com cinco layers e tres frames, da seguinte maneira:

Layers e seus conteúdos:

Layer 1 - fundo: apenas um shape retangular e vai até o frame 3;

Layer 2 - botões: No frame 1 são dois botões, instanciados de "bt_1" e "bt_2", que serão os botões de enviar e atualizar os dados, nos frames 2 e 3 apenas um botão instanciado de bt_3 que é o botão com a ação de voltar para o frame 1.

Layer 3 - Rolagem: Aparece apenas no frame 1 e contem um movieClip instanciado de "medidor" formado internamente por dois layers contendo cada layer um Movieclip, no layer 2, de cima, um quadrado de 12x20 pixels e instanciado de "slider" e no layer mais abaixo um retangulo maior de 14x240 pixels e instanciado de "trilho". É necessário que ambos estejam com o _y = 0, em relação ao movie pai, "medidor", então quando forem criar os retangulos para fazerem o movies, na hora de converter o shape em símbolo marque o quadradinho do alto e à esquerda na opção "registration".
Os outros elementos deste layer são dois botões, instanciados de "scrollSobe" e "scrollDesce"

layer 4 - Textos: No frame 1 são dois blocos de texto dinâmico, instanciados de "listagem" e "aviso" e mais dois blocos de texto input instanciados de "nome" e "comentario" neste layer voce também coloca os blocos de texto estáticos que orientam o visitante para as informações, um escrito "nome" outro escrito "comentário", cada um perto de seus respectivos campos dinâmicos;
No frame 2 apenas um bloco de texto estático com a mensagem: "dados enviados" e no frame três também apenas um bloco de texto estático com a mensagem: "erro no envio"

Layer 5 - Labels:

frame 1: "intro"
frame 2: "success"
frame 3: "error"

Layer 6 - Ações:

Pode colar este bloco todo no seu primeiro frame.
Os comentários estão bem reduzidos, mas suficientes para entender o princípio.

/****LUIZ AVANZI*****/
/****RECIFE, 2004****/
/****USE À VONTADE, PORÉM CITE A FONTE****/

stop();
/****Variáveis para o startDrag da barra****/
var teto = medidor.trilho._y;
var piso = medidor.trilho._height-medidor.slider._height;
var direita = medidor.slider._x;
var esquerda = medidor.slider._x;
/****função que envia data e hora para uma variável****/
function relogio(d) {
   dia = d.getDate().toString();
   mes = d.getMonth()+1;
   ano = d.getFullYear();
   data = ["00".substr(dia.length)+dia, mes, ano];
   hora = d.toString().split(" ")[3];
   return data.join("/")+" - "+hora;
}
function mostrar() {
   _root.horario = relogio(new Date());
}
/****Funções que enviam os dados do flash para o php****/
bt_2.onRelease = function() {
   mostrar();
   if (comentario.text == "" || nome.text == "") {
      aviso.text = "voce tem que preencher os dois campos";
      /*todos os campos devem estar preenchidos*/
   } else {
      aviso.text = "enviando dados...";
      /*status do arquivo enquanto envia os dados*/
      lv_1 = new LoadVars();
      /*Cria um objeto LoadVars para acionar o contador php*/
      lv_1.load("contador.php");
      lv_2 = new LoadVars();
      /*Cria outro objeto LoadVars para enviar os dados digitados pelo visitante para
      que o php possa ler e gravar no txt*/
      lv_2.comentario = comentario.text;
      /*estas são as tres variáveis enviadas pelo flash: comentario, nome e data_hora*/
      lv_2.nome = nome.text;
      lv_2.data_hora = _root.horario;
      lv_2.onLoad = function() {
         gotoAndStop(this.resposta == "OK" ? "success" : "error");
      };
      /*Recebe a resposta do php e envia o flash para o frame certo, de acordo com a resposta*/
      lv_2.sendAndLoad("grava_comentario.php", lv_2, "POST");
      nome.text = "";
      comentario.text = "";
   }
};
lv_3 = new LoadVars();/*Outro objeto LoadVars para ler num txt a quantidade de posts gravados pelo php*/
lv_3.onLoad = function() {
   _root.contagem = this.Count;
};
lv_3.load("PHPCounter.txt");
/****Função que le os dados através de um php ****/
function leDados() {
   listagem.text = "";
   /*zera o conteúdo das caixas de texto*/
   nome.text = "";
   comentario.text = "";
   lv_4 = new LoadVars();
   /*Cria outro objeto LoadVars para ler os dados do php*/
   lv_4.onLoad = function() {
      aviso.text = "listagem atualizada,"+newline+Math.floor(_root.contagem)+" comentários postados";
      listagem.htmlText = this.texto_final;
      /*Le a variável disponibilizada pelo php e exibe seu conteúdo na caixa de texto*/
   };
   lv_4.load("le_texto_externo.php");
   onEnterFrame = function () {
   // Uma pequena função para informar que os dados estão sendo caregados
      if (lv_4.getBytesLoaded() == lv_4.getBytesTotal()) {
         onEnterFrame = null;
      } else {
         aviso.text = "carregando dados...";
      }
   };
}
leDados();
/*A função é chamada sempe que entra este frame, isto faz com que ao clicar no botão voltar o flash atualize as informações sem que voce tenha que carregar novamente o swf*/
bt_1.onRelease = function() {
   leDados();
   /*A função também é chamada atraves do botão "atualizar"*/
};
/****Funções que fazem o scroll****/
/*Inicialmente uma função que vai ser comandada por setInterval para não entrar em conflito com o enterframe dos botões de scroll, é uma simples regra de três que localiza a posição do scroll do texto em relação a posição do "slider" que é o botão da barra de rolagem. Apenas acho importante que ela seja construída assim, com medidas relativas, nenhum número digitado nos valores, porque pode aumentar a quantidade de linhas do texto ou voce pode mudar de lugar ou o tamanho do seu scroll que ele funciona do mesmo jeito*/

function scroller() {
listagem.scroll = Math.round(medidor.slider._y*listagem.maxscroll)/(medidor.trilho._height-medidor.slider._height);
}
scrollSobe.onRollOver = function() {
   onEnterFrame = function () {
      listagem.scroll++;
      /* Aqui abaixo uma outra regra de tres que faz com que o "slider" se desloque também relativamente à posição do scroll do texto, explicando listagem.scroll é o número da linha que está sendo exibida na base da caixa de texto.*/
      this.medidor.slider._y = Math.round((listagem.scroll*(this.medidor.trilho._height-this.medidor.slider._height))/listagem.maxscroll);
   };
};
scrollSobe.onRollOut = function() {
   onEnterFrame = null;
};
scrollDesce.onRollOver = function() {
   onEnterFrame = function () {
      listagem.scroll--;
      this.medidor.slider._y = Math.round((listagem.scroll*(this.medidor.trilho._height-this.medidor.slider._height))/listagem.maxscroll);
   };
};
scrollDesce.onRollOut = function() {
   onEnterFrame = null;
};
medidor.slider.onPress = function() {
   /*Um startDrag com área limitada pelas variáveis declaras lá no começo, todas também relativas para que voce possa mudar a barra de posição e tamanho sem ter que refazer o código. E a chamada da função que desloca o texto verticalmente com relação à posição do "slider", através do setInterval a intervalos bem curtos (5 milisegundos neste caso)*/
   intervalo = setInterval(scroller, 5);
   medidor.slider.startDrag(false, esquerda, teto, direita, piso);
};
medidor.slider.onRelease = function() {
   stopDrag();
   clearInterval(intervalo);
   /*O clear intrval é importante porque se não houvesse como cancelar a função "scroller" o bloco de texto iria ficar "teimoso", os botões não iriam ter como retirá-lo da posição, pois a função "scroller" iria estar sendo chamada a cada 5 milisegundo conforme especificamos no setInterval e entaria em conflito com o enterframe chamado nos botões*/
};

Publique e teste, mas lembre-se que esta interação é com php e aí voce tem que ter o php instalado e o IIS do windows funcionando e habilitado para interpretar php.

Baixe aqui os arquivos do tutorial



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
2 comentários


Comentário de maikon
| 27/7/2011 - 13:06 |


quando clico no botão enviar aparece a mensagem erro no envio alguem sabe porque



Comentário de leo
| 15/2/2010 - 21:49 |


realmente muito bom cara, mas tenho uma duvida, como faço para fazer o flash (+ php) apagar as informações do txt... obrigado