segunda-feira, janeiro 05, 2009

Reverse Frame

O método prevFrame() faz o swf retorna um quadro cada vez que é chamado

Simples, não? Então é só jogar ele num enterframe e mandar ver na animação. Esse código deve ser postado em qualquer lugar que você queira finalizar a animação E retornar a animação ao seu frame um, fazendo um efeito de "reverseframe"

PS: o play() ali é só para exemplo, pra ele rodar em looping :P


stop();

this.onEnterFrame = function(){
prevFrame();
if (this._currentframe<2){
delete this.onEnterFrame
play();
}
}

sexta-feira, maio 23, 2008

Class fadeSound


class fadeSound{
function carregaSom(pathSound:String, timeFade:Number, timeCallFade:Number, totalVolume:Number){
/*
pathSound = som que você precisa que seja carregado. Ex: sons/mysound.wav
timeFade = tempo em que o fade é executado. Ex: timeFade = 3 -> o fade vai durar 3 segundos
timeCallFade = tempo de espera para iniciar o fade.
totalVolume = controle o volume máximo do som por esta variável.

*/
var mySom:Sound = new Sound();
mySom.setVolume(totalVolume);
mySom.loadSound(pathSound,true);

//cria o efeito de fade, mas fica armazenado esperando ser chamado.
function FadeSound(){
var fadeOut = setInterval(function(){
totalVolume--;
mySom.setVolume(totalVolume)
trace(totalVolume);
if(totalVolume == 0){
clearInterval(fadeOut);
mySom.stop();
}
},timeFade*1000);
}

//Chama o fade
var callFade = setInterval(function(){
trace("fadeout called");
FadeSound();
clearInterval(callFade);
},timeCallFade*1000)
}
}


uso: var fade = new fadeSound("mymusic.mp3",3,2,50)

quinta-feira, abril 03, 2008

Slide Show básico

Usei a mcTeen aí, de novo. O efeito é bem simples e fácil de mudar.

1)Crie um movie clip, instanciado "carrega_fotos_mc";
2)Crie, por cima desse movie clip, um outro, instanciado "mascara_mc"
3)Cole esse código abaixo no único frame do arquivo



#include "mc_tween2.as"
this.onEnterFrame = function (){
//faz o preloader
if (this.getBytesLoaded() >= this.getBytesTotal()) {
this.onEnterFrame = null;
//cria um objeto XML para carregá-lo
var oXML = new XML();
oXML.ignoreWhite = true;
oXML.onLoad = function ()
{
//lê o nó principal
var rootNode = this.firstChild;
//lê os nós dentro do nó principal
var childNodes = rootNode.childNodes[0].attributes.src;
//carrega a primeira foto
mascara_mc.xScaleTo(Stage.width,2,"easeInExpo",0,function(){
carrega_fotos_mc.loadMovie(childNodes);
mascara_mc.xScaleTo(0,2,"easeInExpo",0)
})
//função que dá o tempo de visualização das fotos
function timeCarregaFotos(totalTimeFotos,positionNode){
/*
totalTimeFotos = tempo de exibição das fotos
positionNode = faz a navegação entre os nós do XML
positionNode = 0 = primeiro nó
*/
positionNode = 0
var timeInterval = setInterval(function(){
/*Verifica se passou do último nó, e se sim,
joga a posição do "ponteiro" para o primeiro

*/
trace("valor atual: " + positionNode)
if(positionNode >= 25){
trace("valor atual: " + positionNode)
positionNode = 0
mascara_mc.xScaleTo(Stage.width,3,"easeInExpo",0,function(){
//carregamento das fotos propriamente ditas
//ao terminar de carregar as fotos, esconde a máscara branca
carrega_fotos_mc.loadMovie(rootNode.childNodes[positionNode].attributes.src);
mascara_mc.xScaleTo(0,3,"easeInExpo",0)
})
}else{
positionNode++
trace("valor proximo: " + positionNode)
mascara_mc.xScaleTo(Stage.width,3,"easeInExpo",0,function(){
//carregamento das fotos propriamente ditas
//ao terminar de carregar as fotos, esconde a máscara branca
carrega_fotos_mc.loadMovie(rootNode.childNodes[positionNode].attributes.src);
mascara_mc.xScaleTo(0,3,"easeInExpo",0)
})
}
//converte milisegundos em segundos
},totalTimeFotos*1000)
}
timeCarregaFotos(8,0)
};
oXML.load("fotos.xml");
}
}
stop();

sexta-feira, julho 06, 2007

Enviando emails no flash

Para esse exemplo você vai precisar de quatro campos de texto do flash, sendo três de input e um dinâmico, e o componente "mcTween" instalado na sua máquina. Você pode criar via action ou inserindo diretamente no stage; para agilizar o processo, vou presumir que você criou eles via stage mesmo.

Primeira coisa a fazer: Jogar um campo de texto dinâmico e embedar fontes nele; Embede as fontes naquele botãozinho de "Embed..." ali no canto, no painel de propriedades.
Não vá me cometer o erro de clicar em "All (39477 glyphs)", primeiro porque você vai colocar fontes de um país que provavelmente nunca está no mapa; segundo, porque isso gera peso desnecessário no swf final [acredite, eu tive dores de cabeça enormes com isso]
Clique, com a tecla "Ctrl" pressionada, nos campos Uppercase, Lowercase, Numerals, Punctuation, Basic Latin e laaaá no meio Basic Latin I

Ainda temos apenas um campo de texto dinâmico. Copie ele outras três vezes, e mude o tipo do campo de texto para "input"

Depois nomeie esses campos de texto para "nome_txt", "email_txt", "msg_txt".
Um nome para cada no instance name.
E naquele primeiro campo de texto dinâmico você nomeia ele como "msgError_txt"

Agora te prepara, lá vamos nos ao código gigante, em versão action script:


//funções para setar o focus dos campos de texto
function intervalNome(){
var clearMsgError = setInterval(function(){
msgError_mc.msgErros_txt.text = '';
Selection.setFocus(nome_txt)
clearInterval(clearMsgError)
},2000)
}

function intervalEmail(){
var clearMsgError = setInterval(function(){
msgError_mc.msgErros_txt.text = '';
Selection.setFocus(email_txt)
clearInterval(clearMsgError)
},2000)
}

function intervalMsg(){
var clearMsgError = setInterval(function(){
msgErros_txt.text = '';
Selection.setFocus(msg_txt)
clearInterval(clearMsgError)
},2000)
}

//função para o envio da mensagem do conteúdo dos campos de texto
msgErros_txt._alpha = 0
function sendMessage() {
if (nome_txt.text == '') {
msgErros_txt.text = 'Por favor, preencha o campo de nome corretamente';
msgErros_txt.alphaTo(100,.5,"easeInOutExpo",0,function(){
msgErros_txt.alphaTo(0,.5,"easeInOutExpo",2)
intervalNome()
})

} else if(email_txt.text == ''){
msgErros_txt.text = 'Por favor, preencha o campo de e-mail corretamente';
msgErros_txt.alphaTo(100,.5,"easeInOutExpo",0,function(){
msgErros_txt.alphaTo(0,.5,"easeInOutExpo",2)
intervalEmail()
})

}else if(msg_txt.text == ''){
msgErros_txt.text = 'Por favor, digite sua mensagem';
msgErros_txt.alphaTo(100,.5,"easeInOutExpo",0,function(){
msgErros_txt.alphaTo(0,.5,"easeInOutExpo",2)
intervalMsg()
})
}else{
var env:LoadVars = new LoadVars();
env.onLoad = function(success:Boolean) {
if (success) {
msgErros_txt.text = 'Sua mensagem foi enviada com sucesso';
msgErros_txt.alphaTo(100,.5,"easeInOutExpo",0,function(){
nome_txt.text = ""
email_txt.text = ""
msg_txt.text = ""
msgErros_txt.alphaTo(0,.5,"easeInOutExpo",2)
})

} else {
msgErros_txt.htmlText = 'A mensagem não pôde ser enviada.
Por favor, tente novamente';
msgErros_txt.alphaTo(100,.5,"easeInOutExpo",0,function(){
msgErros_txt.alphaTo(0,.5,"easeInOutExpo",2)
})
}
};
env.nome = nome_txt.text;
env.email = email_txt.text;
env.mensagem = msg_txt.text;
env.sendAndLoad('formulario.php', env, 'POST');
}
}
enviar_mc.onPress = function() {
sendMessage()
};


Esse treco gigante aí faz o seguinte, em portugol:
Verifica se o campo de texto 'nome' está vazio; se sim, coloque o foco nele;
Verifica se o campo de texto 'email' está vazio; se sim, coloque o foco nele;
Verifica se o campo de texto 'msg' está vazio; se sim, coloque o foco nele;
Em todos os campos avise o usuário para preencher o campo que está vazio;
Depois disso, crie uma variável chamada "env" e armazene os valores desses campos de texto dentro dela
Mande a variável env para o arquivo "formulario.php" através do método "post"

Nesse caso eu usei php, porque é mais simples [para mim]


$nome = $_POST['nome'];
$email = $_POST['email'];
$mensagem = $_POST['mensagem'];


$msg = "Nome: \t$nome
";
$msg .= "E-mail: \t$email
";
$msg .= "Mensagem: \t$mensagem";

$mensagem = "$msg";
$remetente = "$email";
$destinatario = "batista.guilherme@gmail.com";
$assunto = "Dúvidas";
$headers = "From: ".$remetente."\nContent-type: text/html"; # o ‘text/html’ é o tipo mime da mensagem
if(!mail($destinatario,$assunto,$mensagem,$headers)){
print "falha no envio da mensagem";
} else {
echo "sua mensagem foi enviada com sucesso, obrigado. Clique aqui para voltar para nosso site";
}
?>

terça-feira, junho 12, 2007

Resolvendo problemas de data com asp e mdb

ASP é uma coisa tão nojenta e mal feita que deveria ser banida do mundo da programação...
por exemplo, asp tem um problema ao ler datas de um banco de dados: ele não costuma ter por default o padrão que o desenvolvedor está trabalhando. Isso pode gerar problemas de datas sendo exibididas em padrão americano - default da linguagem - ou o padrão espeficicado no database, causando assim confusões e dores de cabeça (ai a minha...)

Coloque esse código quando precisar ler datas vindas de um mdb:


Session.LCID = "numeração da região"


onde "numeração da região" pode ser qualquer item abaixo:
1078 Afrikaans 1052 Albanian
5121 Arabic(Algeria)
15361 Arabic(Bahrain)
3073 Arabic(Egypt)
2049 Arabic(Iraq)
11265 Arabic(Jordan)
13313 Arabic(Kuwait)
12289 Arabic(Lebanon)
4097 Arabic(Libya)
6145 Arabic(Morocco)
8193 Arabic(Oman)
16385 Arabic(Qatar)
1025 Arabic(Saudi Arabia)
10241 Arabic(Syria)
7169 Arabic(Tunisia)
14337 Arabic(U.A.E.)
9217 Arabic(Yemen)
1069 Basque
1059 Belarusian
1026 Bulgarian 1027 Catalan
3076 Chinese(Hong Kong)
2052 Chinese(PRC)
4100 Chinese(Singapore)
1028 Chinese(Taiwan)
1050 Croatian 1029 Czech
1030 Danish 2067 Dutch(Belgian)
1043 Dutch(Standard)
9 English
3081 English(Australian)
10249 English(Belize)
2057 English(British)
4105 English(Canadian)
9225 English(Caribbean)
6153 English(Ireland)
8201 English(Jamaica)
5129 English(New Zealand)
7177 English(South Africa)
11273 English(Trinidad)
1033 English(United States)
1061 Estonian
1080 Faeroese
1065 Farsi
1035 Finnish 2060 French(Belgian)
3084 French(Canadian)
5132 French(Luxembourg)
1036 French(Standard)
4108 French(Swiss)
2108 Gaelic(Irish)
1084 Gaelic(Scots)
3079 German(Austrian)
5127 German(Liechtenstein)
4103 German(Luxembourg)
1031 German(Standard)
2055 German(Swiss)
1032 Greek
1037 Hebrew
1081 Hindi
1038 Hungarian
1039 Icelandic
1057 Indonesian
1040 Italian(Standard)
2064 Italian(Swiss)
1041 Japanese
1042 Korean
2066 Korean(Johab)
1062 Latvian
1063 Lithuanian
1071 Macedonian
1086 Malaysian
1082 Maltese
1044 Norwegian(Bokmal)
2068 Norwegian(Nynorsk)
1045 Polish
1046 Portuguese(Brazilian)
2070 Portuguese(Standard)
1047 Rhaeto-Romanic
1048 Romanian
2072 Romanian(Moldavia)
1049 Russian
2073 Russian(Moldavia)
1083 Sami(Lappish)
3098 Serbian(Cyrillic)
2074 Serbian(Latin)
1051 Slovak 1060 Slovenian
1070 Sorbian 11274 Spanish(Argentina)
16394 Spanish(Bolivia)
13322 Spanish(Chile)
9226 Spanish(Colombia)
5130 Spanish(Costa Rica)
7178 Spanish(Dominican Republic)
12298 Spanish(Ecuador)
17418 Spanish(El Salvador)
4106 Spanish(Guatemala)
18442 Spanish(Honduras)
2058 Spanish(Mexican)
19466 Spanish(Nicaragua)
6154 Spanish(Panama)
15370 Spanish(Paraguay)
10250 Spanish(Peru)
20490 Spanish(Puerto Rico)
3082 Spanish(Spain - Modern Sort)
1034 Spanish(Spain - Traditional Sort)
14346 Spanish(Uruguay)
8202 Spanish(Venezuela)
1072 Sutu
1053 Swedish
2077 Swedish(Finland)
1054 Thai
1073 Tsonga
1074 Tswana
1055 Turkish
1058 Ukrainian
1056 Urdu
1075 Venda
1066 Vietnamese
1076 Xhosa
1085 Yiddish
1077 Zulu
2048 default

segunda-feira, maio 28, 2007

Typewriter


function typeWriter(timeWriter:Number){
//criamos uma nova variável para chamar o xml
var oXML:XML = new XML();
//a variável world é para fechar o setInterval
var world:Number = 0
//ignoramos os espaços em branco do xml
oXML.ignoreWhite = true;
//começa a carregar o xml
oXML.onLoad = function():Void{
//define uma variável para ler o primeiro nó do xml
var rootNode:XMLNode = this.firstChild;
//no contador abaixo, passamos a variável por todos os nós internos
for(var i = 0; i < rootNode.childNodes.length; i++){
//lê os nós internos
var nodeDados:XMLNode = rootNode.childNodes[i];
//contamos os itens dentro desa vairável
for(var n = 0; n < nodeDados.childNodes.length; n++){
//lemos o atributo 'cdata' dos xmls
var nodeValue:String = nodeDados.childNodes[n].nodeValue;
//esse intervalo é o responsável pelo tempo da digitação
var textWriterInterval = setInterval(function(){
//incrementa a variável
world++
/*
aqui está o truque. Com o substr, pegamos o index zero do campos de texto e inserimos
uma letra nele, escolhida pela variável world
*/
text_txt.htmlText = nodeValue.substr(0, world) ; //nome do campo de texto
//o if abaixo fecha o intervalo para evitar consumo desnecessário de memória
if(world == nodeValue.length){
clearInterval(textWriterInterval)
}
},timeWriter)
}
}
}
//não importa o quanto de texto entre, o campo de texto se ajusta a ele
text_txt.autoSize = true;
//carrega o arquivo xml
oXML.load("texte2.xml");
}
box_mc.onPress = function(){
typeWriter(45)
}


É um efeito simples e usável
De qualquer maneira, ele está usando xml, mas no lugar dele você poderia usar um txt ou mesmo uma variável dentro do campo de texto.

Arquivo de exemplo:
aqui

Vc vai precisar do winrar para abrir o documento compatado
(agradecimentos à nayara)

segunda-feira, maio 07, 2007

Resize em flash, flash 100% e liquid flash

Eu sei, to sumido, mas entenda, eu tinha muito job para fazer


Pelo menos adquiri mais experiência e agora posso postar mais códigos!



Seguinte, tá em moda colocar o flash em 100% da área do browser. Eu pessoalmente acho isso besteira, mas sempre tem um cliente mala ou outro que pede.

Isso e um tico mais complicado:

Começando pelo css da página, vc tem que colocar esse código:


html, body {
height: 100%;
margin: 0;
padding: 0;
}


Depois, no código embed do código html, vc muda width e height da exibição do swf.
E depois no flash vc coloca o seguinte código:

function Resize(){
//sem escala para evitar "perda" de qualidade
Stage.scaleMode = "noScale";
/*defina as posições inciais dos elementos*/
var resizeListener:Object = new Object();
resizeListener.onResize = function() {
/*aqui vc coloca todos os elementos que quer que fiquem com posicionamento líquido no flash*/
};
Stage.addListener(resizeListener);
}


Simples né?