0

sábado, 20 de setembro de 2008

CAIXA DE DIALOGO COR E CONTROLE ANIMADO





Ola galera não sei se vocês sabem mas na api win32 contem
alguns funções que são chamados de diálogos comuns que são
usado por programas que precisam por exemplo escolher as cores de um
determinado objeto, como por exemplo quando clicamos na
em cores/editar cores no PAINT, encontrar (ctrl +f) no
NOTEPAD entre outros, ensinarei alguns passos básicos
de como escolher uma cor com uma caixinha igual aquela
do PAINT.

E há também a possibilidade de criar controles animados
durante essa explicação você aprenderá tmbem como mostrar animação
em janelas Windows (arquivos avis sem som).

Obs:O exemplo usado aqui foi compilado no dev-ccpp.
Continuando se voce é iniciante na programção windows c/c++
tudo bem não sera um quebra cabeça, lembrando duvida so comentar.
Lembrando este tutorial esta todo dentro de comentários.
vamos a primeira parte:


/* aqui se encontra os handles das janelas */
HWND hwnd , botao,ANIMADO, hJanAni;

HBRUSH hbrush; //essa HBRUSH recebe o valor da cor
// escolhida pelo usuario
/* Declaração da Windows procedure */
LRESULT CALLBACK WindowProcedure (
HWND, UINT, WPARAM, LPARAM);
/* coloca-se o nome da classe em um variavel global */
char szClassName[ ] = "WindowsApp";

/*Bem a seguinte parte é a que eu criei uma funçãozinha
para ficar mais limpo o codigo.Essa função é usada
apenas para abria a caixa de dialogo e guardar a
cor escolhida em um HBRUSH
*/


//FUNÇÃO QUE INICIALIZA O DIALOGO PARA
// ESCOLHER E TROCAR A COR //
void PINTAR(){
//A estrutura de CHOOSECOLOR contém informação que a
//funçao ChooseColor usa para inicializar caixa de
// diálogo comum Cor. Depois que o usuário fechar caixa

//de diálogo, o de sistema retorna a informação sobre a
//seleção do usuário nesta estrutura.

CHOOSECOLOR cc; //estrutura da caixa de dialogo comum que deve
// ser preenchida com os elementos necessarios
static COLORREF acrCustClr[16]; // array de cores personalizadas
static DWORD rgbCurrent; // inicialização da seleção de cor
// Initializar CHOOSECOLOR
ZeroMemory(&cc, sizeof(CHOOSECOLOR));

cc.lStructSize = sizeof(CHOOSECOLOR);
//Especifica o tamanho em bytes da estrutura.
cc.hwndOwner = botao; //janela principal
//Este membro pode ser qualquer handle de
//janela valido ou NULL caso o caixa de
//dialogo nao tenha um janela principal.

cc.lpCustColors = (LPDWORD) acrCustClr;
cc.rgbResult = rgbCurrent;
cc.Flags = CC_FULLOPEN CC_RGBINIT;
if (ChooseColor(&cc)==TRUE)
{
hbrush = CreateSolidBrush(cc.rgbResult);
rgbCurrent = cc.rgbResult;
}

}
depois de inicializar todos elementos da estrutura é feito
uma condição ou seja se for verdadeira(TRUE) é
criado uma HBRUSH com a cor escolhida
pelo usuario, umas vez que voce sabe que a cor foi
quardada em uma HBRUSH voce pode usar onde
quizer certo, então foi isso que fizemos.
vamos ao proximo passo:

int WINAPI WinMain (HINSTANCE hThisInstance,
HINSTANCE hPrevInstance,
LPSTR lpszArgument,
int nFunsterStil)
{

PINTAR();

//Observe chamamos a função pintar logo
//Para que ela seja a primeira a ser executada

MSG messages; /* Here messages to the application are saved */
WNDCLASSEX wincl; /* Data structure for the windowclass */

/* The Window structure */

wincl.hInstance = hThisInstance;
wincl.lpszClassName = szClassName;
wincl.lpfnWndProc = WindowProcedure; /* Chamado pelo */
wincl.style = CS_DBLCLKS; /* Aceitar clicks duplos */
wincl.cbSize = sizeof (WNDCLASSEX);
/* Use default icon and mouse-pointer */
wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
wincl.lpszMenuName = NULL; /* sem menu */
wincl.cbClsExtra = 0;
wincl.cbWndExtra = 0;

wincl.hbrBackground = (HBRUSH) hbrush ;
/* Registra a classe a janela , e se falhar quita o programa*/
if (!RegisterClassEx (&wincl))

return 0;
/* classe registrada, cria-se o programa*/
hwnd = CreateWindowEx (
0,
szClassName, /* Nome da classe da nossa janela principal */
"janela com conteudo animado e dialogo comum", /*Titulo da janela */
WS_OVERLAPPEDWINDOW, /* estilo */
CW_USEDEFAULT, /* Windows decide a posição */
CW_USEDEFAULT,
544, /* width */
375, /* height */
HWND_DESKTOP, /* Uma janela para desktop*/
NULL, /* Sem menu */
hThisInstance, /* handler da instancia do programa */
NULL /* não importa ainda */
);
/*Isso faz a janela visivel na tela */
ShowWindow (hwnd, nFunsterStil);


Bem vamos agora para a criação da nossa janela com uma animação,
Eu usei nesse exemplo um vídeo avi ele precisa ser semn nenhuma compressão
Para seus teste eu recomendo que use algum do próprio WINDOWS, como
Lupinha que aparece quando pesquisamos com o explorer.


a varivel ANIMADO foi criada no inicio da nossa explicação

ANIMADO = CreateWindowEx (
0,
"STATIC",
"animado",
WS_VISIBLEWS_CHILDWS_BORDER,
200, 200, 30, 30,
hwnd,
NULL,
GetModuleHandle(0),
NULL
);

A macro Animate_Create cria uma um controle animado
pois ela chama a função CreateWindow.Ela é seguida de
Animate_Open que precisa do controle animado criado com
Animate_Create e de um endereço para algum arquivo.
Animate_Play dispença comentários.

hJanAni = Animate_Create(
ANIMADO, 0, WS_VISIBLEWS_CHILD,
GetModuleHandle(0));


Animate_Open(
hJanAni,
"gis.avi");
Animate_Play(hJanAni,
1,
-1,
-1);

Bem aqui esta o loop de mensagens
Sem nehuma modificação.

while (GetMessage (&messages, NULL, 0, 0))
{
/* Translate virtual-key messages into character messages */
TranslateMessage(&messages);
/* Send message to WindowProcedure */
DispatchMessage(&messages);
}


/* O programa retorna um valor igual a zero dado por PostQuitMessage() */

return messages.wParam;
}


LRESULT CALLBACK WindowProcedure (HWND hwnd
, UINT message, WPARAM wParam, LPARAM lParam)
{

switch (message) /* handle de mensagens */
{

case WM_DESTROY:
PostQuitMessage (0);

/* envia um WM_QUIT para a fila de mensagem */
break;
default: /* para mensagens com as que nós não lidamos */
return DefWindowProc (hwnd, message, wParam, lParam);
}
return 0;
}


Lembrando, acompanhe atenciosamente os comentarios que são as explicaçoes
para cada item do codigo.
Obrigado pela vossa atençao e ate mais.Qualquer duvida deixa-a nos
comentários que tentarei explicar.

CONTINUE LENDO...

quinta-feira, 18 de setembro de 2008

passar variaveis de javascript para php

Vamos compartilhar variaveis de javascript para php

bem sabemos que javascript é uma tecnogia
que trabalha do lado do cliente e dessa
forma ja estamos entrando em contradição
com o PHP que por sua vez é do lado do
servidor muito bem se não bastasse HTTP
é um protocolor digamos que não sabe onde
ficar digamos que ele é um nomande dessa
forma essas duas linguagens não podem
compartilhar variais diretamente.

Porem é possivel passar variaveis entre
os dois.Uma forma de fazer isso é gerar
codigos javascript com PHP, e então o
browser atualiza sozinho, passando variaveis
especificas por tras do SCRIPT PHP.O exemplo
a seguir mostrar precisamente como fazer isso
permitir que o codigo PHP capture o height
da tela e o width, algo que é possivel
normalmente apenas no lado do cliente (javascript).


\n";
echo "Screen height é: ". $_GET['height'] ."
\n";
} else {


echo "
\n";
exit();
}
?>

CONTINUE LENDO...

criaçao de controle animado e caixas de dialogo para escolher cor

Ola galera não sei se vocês sabem mas na api win32 contem

alguns funções que são chamados de diálogos comuns que são

usado por programas que precisam escolher as cores de um

determinado objeto, como por exemplo quando clicamos na

em cores/editar cores no PAINT, encontrar (ctrl +f) no

notepad entre outros ensinarei alguns passos básicos

de como escolher uma cor com uma caixinha igual aquela

do PAINT.

E há também a possibilidade de criar controles animados

durante essa explicação você aprenderá como mostrar animação

em janelas Windows.



Obs:O exemplo usado aqui foi compilado no dev-ccpp.



Continuando se voce é iniciante na programção windows c/c++

tudo bem não sera um quebra cabeça, lembrando duvida so comentar.



Lembrando este tutorial esta todo dentro de comentários.

vamos a primeira parte:





#include

#include

#include

#include



/* aqui se encontra os handles das janelas */

HWND hwnd , botao,ANIMADO, hJanAni;








HBRUSH hbrush; //essa HBRUSH recebe o valor da cor

// escolhida pelo usuario



/* Declaração da Windows procedure */

LRESULT CALLBACK WindowProcedure (

HWND, UINT, WPARAM, LPARAM);



/* coloca-se o nome da classe em um variavel global */

char szClassName[ ] = "WindowsApp";





/*Bem a seguinte parte é a que eu criei uma funçãozinha

para ficar mais limpo o codigo essa função é usada

apenas para abria a caixa de dialogo e guardar a

cor escolhida em um HBRUSH

*/



//FUNÇÃO QUE INICIALIZA O DIALOGO PARA

// ESCOLHER E TROCAR A COR //



void PINTAR(){


CHOOSECOLOR cc; //estrutura da caixa de dialogo comum

static COLORREF acrCustClr[16]; // array de cores personalizadas

//

//

static DWORD rgbCurrent; // inicialização da seleção de cor



// Initializar CHOOSECOLOR

ZeroMemory(&cc, sizeof(CHOOSECOLOR));

cc.lStructSize = sizeof(CHOOSECOLOR);

cc.hwndOwner = botao; //janela principal

cc.lpCustColors = (LPDWORD) acrCustClr;

cc.rgbResult = rgbCurrent;



cc.Flags = CC_FULLOPEN | CC_RGBINIT;


if (ChooseColor(&cc)==TRUE)

{

hbrush = CreateSolidBrush(cc.rgbResult);

rgbCurrent = cc.rgbResult;

}



}



depois de inicializar todos elementos da estrutura é feito

uma condição ou seja se for verdadeira(TRUE) é

criado uma HBRUSH com a cor escolhida

pelo usuario, umas vez que voce sabe que a cor foi

quardada em uma HBRUSH voce pode usar onde

quizer certo, então foi isso que fizemos.

vamos ao proximo passo:





int WINAPI WinMain (HINSTANCE hThisInstance,

HINSTANCE hPrevInstance,

LPSTR lpszArgument,

int nFunsterStil)

{


PINTAR();



//Observe chamamos a função pintar logo

//Para que ela seja a primeira a ser executada


MSG messages; /* Here messages to the application are saved */

WNDCLASSEX wincl; /* Data structure for the windowclass */



/* The Window structure */

wincl.hInstance = hThisInstance;

wincl.lpszClassName = szClassName;

wincl.lpfnWndProc = WindowProcedure; /* Chamado pelo */

wincl.style = CS_DBLCLKS; /* Aceitar clicks duplos */

wincl.cbSize = sizeof (WNDCLASSEX);



/* Use default icon and mouse-pointer */

wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);

wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);

wincl.hCursor = LoadCursor (NULL, IDC_ARROW);

wincl.lpszMenuName = NULL; /* sem menu */

wincl.cbClsExtra = 0;

wincl.cbWndExtra = 0;

wincl.hbrBackground = (HBRUSH) hbrush ;



/* Registra a classed a janela , e se falhar quita o programa*/

if (!RegisterClassEx (&wincl))a

return 0;



/* classe registrada, cria-se o programa*/



hwnd = CreateWindowEx (

0,

szClassName, /* Nome da classe da nossa janela principal */

"janela com conteudo animado e dialogo comum", /*Titulo da janela */

WS_OVERLAPPEDWINDOW, /* estilo */

CW_USEDEFAULT, /* Windows decide a posição */

CW_USEDEFAULT,

544, /* width */

375, /* height */

HWND_DESKTOP, /* Uma janela para desktop*/

NULL, /* Sem menu */

hThisInstance, /* handler da instancia do programa */

NULL /* não importa ainda */

);



/*Isso faz a janela visivel na tela */

ShowWindow (hwnd, nFunsterStil);



Bem vamos agora para a criação da nossa janela com uma animação,

Eu usei nesse exemplo um vídeo avi ele precisa ser semn nenhuma compressão

Para seus teste eu recomendo que use algum do próprio WINDOWS, como

Lupinha que aparece quando pesquisamos com o explorer.



Essa varivel foi criada no inicio da nossa explicação



ANIMADO = CreateWindowEx (

0,

"STATIC",

"animado",

WS_VISIBLE|WS_CHILD|WS_BORDER,

200, 200, 30, 30,

hwnd,

NULL,

GetModuleHandle(0),

NULL

);



A macro Animate_Create cria uma um controle animado

pois ela chama a função CreateWindow.Ela é seguida de

Animate_Open que precisa do controle animado criado com

Animate_Create e de um endereço para algum arquivo.

Animate_Play dispença comentários.



hJanAni = Animate_Create(

ANIMADO,

0, WS_VISIBLE|WS_CHILD,

GetModuleHandle(0));



Animate_Open(

hJanAni,

"gis.avi");



Animate_Play(hJanAni,

1,

-1,

-1);



Bem aqui esta o loop de mensagens

Sem nehuma modificação.


while (GetMessage (&messages, NULL, 0, 0))

{

/* Translate virtual-key messages into character messages */

TranslateMessage(&messages);

/* Send message to WindowProcedure */

DispatchMessage(&messages);


}



/* O programa retorna um valor igual a zero dado por PostQuitMessage() */

return messages.wParam;

}





LRESULT CALLBACK WindowProcedure (HWND hwnd
, UINT message, WPARAM wParam, LPARAM lParam)

{


switch (message) /* handle de mensagens */

{


case WM_DESTROY:

PostQuitMessage (0);


/* envia um WM_QUIT para a fila de mensagem */

break;

default: /* para mensagens com as que nós não lidamos */

return DefWindowProc (hwnd, message, wParam, lParam);



}



return 0;

}



Bem galera qualquer duvida deixa-a nos comentários que tentarei explicar.

CONTINUE LENDO...

segunda-feira, 15 de setembro de 2008

Multimedia - musicas e videos em apiwin32 com apenas uma função -MCIWndCreate





Voce pode tocar arquivos wav, cds, video clips, ou arquivos MIDI para o seu programa chamando uma unica função:MCIWndCreate.Essa função cria uma janela com a tipo de classe MCIWND_WINDOW_CLASS, com um botão que o usuario usa para tocar ou para um determinado arquivo, a barra que mostra a posição atual do arquivo, e, no caso de um video clip, uma area na qual um video é mostrado.O seguinte exemplo chama a função MCIWndCreate que toca o video clip sample.avi:
MCIWndCreate(hwndParent, // ponteiro do janela principal(pai)g_hinst, // ponteiro de instance(voce pode usaretModuleHandle(0) )WS_VISIBLE WS_CHILD MCIWNDF_SHOWALL, // estilos da janela"sample.avi"); ///o dito arquivo que deve esta na mesma pasta do programa
Uma outra função que muito util é a PlaySound, voce pode usa-la para implementar seus programas de multimedia com uma simples chamada.Voce pode usar essa função para tocar arquivos waves.Por exemplo a seguinte linha de codigo toca um som guardado no seu disco com o nome tentoaprender.wav:
PlaySound("tentoaprender.wav",hInstance,SND_ASYNC SND_NODEFAULT SND_NOSTOP);
hInstance é o módulo do aplicativo ou pode ser o handle retornado pela função GetModuleHandle ou seja voce pode substituir hInstance por GetModuleHandle(0).
SND_ASYNC: assíncrono, a função não trava o segmento,começa a tocar e já retorna, o som pode parar tocando um som nulo (com NULL no lugar do arquivo);SND_SYNC: síncrono, a função ñ retorna até q o som termine de tocar;SND_LOOP: o som toca repetidamente até q se toque um som nulo(com NULL no lugar do arquivo);SND_NODEFAULT: se o som ñ for encontrado ñ toca o som padrão do sistema (akele som de erro);SND_NOSTOP: se o som já está sendo tocado não para de tocar.
Obs:O video não deve ter nenhuma compressão, Vlw e ate a proxima.

CONTINUE LENDO...

Metodo de animação (breve descrição


Toda animação no Max começa pelo Botão Animate. Ele avisa o Max para criar uma chave em determinados ponto da linha de animação que é denominado de Key Frame. Esta chave representa o estado transformacional (posição, rotação e escala)de qualquer objeto em um determinado ponto no tempo.Todas as mundança em uma propriedade de objeto ocorridas ao longo do tempo são representadas por uma chave. Isso é feitomediante a criação de uma chave em uma linha de tempo para cada alteraçãofeita no objeto.Quando os objetos mudam (Criando diferentes chaves) em quadros diferentes ao longo de uma linha de tempo, você tem um objeto que muda (de uma ou mais formas) ao longo de um determinado tempo.Essa é a base do processo de animação. Portanto, o exemplo mais básico de animação é começar com um objeto no quadro 0,mover-se para uma quadro diferente de zero (por exemplo, quadro 20),ativar o botão animate e mover o objeto para uma posição diferente oualterá-lo de alguma maneira. O Max preenche todas as posiçõesintermediárias do quadro 0 a 20 para dar a impressão de que o objetoesta se movendo de um local ao outro.



A figura acima mostra o Trackview, que é o responsável por todo o controle de animação no 3D Studio MAX. As bolinhas representam os Keyframes. Essas chaves são adicionadas a cada novamovimentação de um objeto no tempo de animação
Na verdade, o Max oferece mais de um método que automatiza sua animação com quadroschave:Um método automático e outro manual. O Botão Animate é o método automático onde o max insere instantes as chaves necessárias para representar as alterações feitas na sua cena.Mesmo se você selecionar e alterar mais de um objeto ao mesmo tempo, o max irá inserir chave individuais.Contudo, há momentos em que você mesmo vai querer inserir suas próprias chaves. O Max permite que você faça extamenteisso na janela do visor alternativo Track. A Janela Track exibe alinha de tempo da sua animação. Nessa Janela, você manualmenteinsere um chave em qualquer quadro ao longo da linha de tempopara registrar o estado de qualquer objeto daquele quadro emparticular. Na maioria dos projetos de animação, você deixa o Max criar os movimentos iniciais com o botão Animate, em seguida faz os ajuste precisos dos movimentos através da edição ecriação de chaves na janela Track.Mas isso éassunto pra depois ate lá.

CONTINUE LENDO...

sábado, 13 de setembro de 2008

criar site dinamico com flash

Introdução

Este tutorial lhe mostra como criar um site básico sem nada no palco. Isto envolverá o carregamento dinâmico de JPEGs e a criação de movieclips via ActionScript. Algumas coisas colocadas aqui serão avançadas mas eu seguirei por elas passo a passo.

Primeiros passos

Vamos começar dizendo que todos os códigos AS desse tutorial devem ser colocados no prmeiro e único frame do seu filme. Não teremos arquivo para download, pois os únicos usados são 4 imagens JPG e um MP3, além de do código indicado. Carregue o Flash e configure o tamanho do palco para 600 X 400. Configure a velocidade de projeção (frame rate) para 21 e escolha você mesmo a cor do fundo. Salve seu arquivo como index.fla. Agora vamos entrar em uma coisa nova e interessante no MX - criar movieclips e campos de texto via ActionScript. Dê o nome de "acoes" a uma (e única) camada e cole esse código no primeiro quadro:

// permite que o FlashPlayer reconheça acentos e cedilha
System.useCodepage = true;



//crio um campo de texto dinâmico com seus parâmetros
_root.createTextField("campo",20,50,50,200,300);
campo.background=true;
campo.border=true;
campo.backgroundColor=0xFFFFFF; // branco
campo.borderColor=0x000000; // preto
campo.multiline=true;
campo.wordWrap=true;
campo.variable="meuTexto";
// crio um objeto Textformat
meuFormato = new TextFormat();
meuFormato.font = "Arial";
meuFormato.size = 12;
meuFormato.color=0x000000;// preto
// aponto o formato para nosso campo de texto
campo.setNewTextFormat(meuFormato);

Explicando o código

Este tem muita ação. Vamos examina-las.

_root.createTextField("campo",20,50,50,200,300);

Isto cria um campo de texto em branco, dá a ele o nome de instância de "campo", posiciona-o na profundidade de 20 (profundidade é parecida com camadas, de certo modo - somente fique prevenido de que, se você posicionar alguma coisa a mais na mesma profundidade (20) seu campo de texto será removido), coloque o canto superior esquerdo de nosso campo de texto em 50 no eixo x e 50 no y, e então lhe de uma largura de 200 e uma altura de 300.

Nas próximas 6 linhas, determino somente alguns parâmetros que controlam a aparência do nosso campo de texto - estas devem ser bastante auto-explicativas.

Depois disso associaremos ao nosso campo de texto a variável "meuTexto".

meuFormato = new TextFormat();

Isto cria um objeto em formato texto (textFormat). Podemos então configurar todo o conjunto de parâmetros em nosso objeto em formato texto (podemos ver 3 destes parâmetros nas próximas 3 linhas) e então criar dinamicamente um campo de texto formatando-o com nosso objeto TextFormat (que acontece na última linha).

Salve seu Fla e teste seu filme. Você verá seu campo de texto criado no palco exatamente onde você deseja. O problema é que não tem texto. Vamos colocar algum nele.

Arquivo de texto

Abra um programa editor de texto como o notepad, abra um novo documento e cole nele este texto:
meuTexto=Bem-vindo ao meu site dinamicamente criado. Eu sou um Deus em actionscript. Por favor, aprecie sua estada.&

Você notará que meuTexto também é o nome da variável que nós demos ao nosso campo de texto dentro do Flash.

Salve o arquivo como "arquivo.txt" dentro da mesma pasta.

De volta ao Flash, adicione esta ação debaixo de todas as outras:
// carregar nosso texto
loadVariables("arquivo.txt", "_root");

Isto carregará nosso arquivo de texto na linha de tempo principal. Porque nosso campo de texto está localizado na linha de tempo principal (_root) e tem um nome de variável de meuTexto, ele se mostrará automaticamente sempre que nosso arquivo de texto disser meuTexto é igual a alguma coisa. Faz sentido?

Teste seu filme novamente e você verá o novo texto mostrado - pode não parecer muito bonito, mas servirá por agora.

Criando movieclips dinamicamente

Assim, nós criamos um campo de texto via código AS - agora vamos fazer o mesmo com alguns movieclips (os quais nós, na verdade, estaremos usando como botões!)

Cole este grupo de ações debaixo das outras:

// criando nossos botões
for (i=1; i<5; i++) {
_root.createEmptyMovieClip("botao"+i, 100+i);
_root["botao"+i].lineStyle(2, 0x000000);
_root["botao"+i].beginFill(0xFF0000)
_root["botao"+i].moveTo(0, 0);
_root["botao"+i].lineTo(50, 0);
_root["botao"+i].lineTo(50, 50);
_root["botao"+i].lineTo(0, 50);
_root["botao"+i].lineTo(0, 0);
_root["botao"+i]._x = 250+ (i*60);
_root["botao"+i]._y = 25;
}

Explicando o código

Novamente, vamos através dele bit por bit.

for(i=1;i<5;i++){

Isto é um loop for e faz o Flash repetir todo o código debaixo dele 4 vezes - com nossa variável "i" aumentada por 1 a cada vez.

Vamos analisar esta linha um pouco mais.

No começo do loop for configuramos o valor inicial de nossa variável "i" (i=1).

Ótimo, assim i=1 - e agora? Agora dizemos ao Flash que queremos que ele continue o loop for até que certa condição seja encontrada - i<5.

Dizemos então ao Flash o que fazer a cada vez que o código dentro do loop for for completado - i++. Isto é o mesmo que dizer "tome o valor corrente de i e aumente i em 1".

Assim, o Flash vai ao loop for e diz "agora então deixe-me ver, se aparecer aquele i=1 que todos sabemos ser menor do que 5, então posso ir em frente e rodar todo este código contido neste loop for aqui. Assim, ele roda através de todo o código dentro do loop for e quando chega ao final aumenta i em 1 e diz "hmmm, parece que i permanece menor do que 5... Vou rodar através de todo este código novamente". O Flash continua a falar com ele mesmo e a rodar o código no nosso loop for até que eventualmente i=5 e ele diz "hei! i deixou de ser menor do que 5... Terminei com este loop!".

Como (eu espero) você pode ver - loops for são muito poderosos e poupadores de tempo real.

Certo, vamos dar uma olhada no resto desse código.

_root.createEmptyMovieClip("botao"+i, 100+i);

Isto cria um movieclip em branco em nossa linha de tempo principal. Dependendo do que rode através do loop for, o novo movieclip terá um nome de instância de botao1 ou botao2 etc e será alocado numa profundidade de 101 ou 102 etc.

OK, assim temos um movieclip em branco, mas nós queremos traçar alguma coisa nele - uma caixa, por exemplo. As próximas 7 linhas do código faz exatamente isto. Nós (eu) não temos realmente tempo de examinar detalhes neste momento sobre o novo API de desenho do MX. Somente fique ciente de que o código ali traça 4 linhas com largura de 2, de cor preta [lineStyle(2, 0x000000)] e então preenche com vermelho [beginFill(0xFF0000)].

Então as últimas 2 linhas simplesmente posicionam nossos novos movieclips no palco.

_root["botao"+i]._x=250+ (i*60);
_root["botao"+i]._y=25;

Assim, a primeira vez que o Flash segue através do loop for, cria um novo movieclip com um nome de instância de botao1 e o posiciona no palco numa posição x de 310 e numa posição y de 25. A segunda vez que ele seguir através do loop for, criará um novo movieclip com nome de instância de botao2 e o posicionará no palco numa posição x de 370 e numa y de 25.

Isso é um código bem sério. Não se estresse se ele não fizer sentido de imediato para você.

Teste seu filme. Você deve ver 4 quadrados no canto superior direito. Elas devem ser vermelhas com bordas pretas.

Assim, temos 4 movieclips no palco com nomes de instância de botao1, botao2, botao3 e... oh, claro… botao4. Outra coisa nova no Flash MX é que nós podemos agora atribuir ações a botões movieclips, como onRelease - veremos isto em um segundo. Primeiro vamos criar novas variáveis em nosso arquivo de texto que serão carregados por dois de nossos botões. Volte ao seu arquivo.txt e adicione mais essas linhas:
&meuTexto1=este é o texto que será carregado quando o usuário clicar no botão1.&
&meuTexto2=Eu sou mais um texto. Na verdade não queria estar aqui, mas tenho que estar porque o usuário clicou no botão2 - posso ir pra casa agora?&

De volta ao Flash

Agora, de volta ao Flash, adicione esta ação debaixo de todas as outras:
botao1.onRelease = function() {
meuTexto = meuTexto1;
};
botao2.onRelease = function() {
meuTexto = meuTexto2;
};

Como você pode ver, demos ações a dois dos nossos movieclips. O Flash gentilmente responde mudando o cursor do mouse para o dedo quando o usuário passar com ele sobre os quadrados, permitindo assim que clique sobre elas. Teste seu filme e clique nos 2 botões mais à esquerda. Você deverá ver os 2 novos textos exibidos no seu campo de texto.

Inserindo imagens

Bem, isso tudo é muito legal, mas nós queremos algumas imagens. Pegue 4 fotos, recorte e redimensione todas até que fiquem com uma largura de 100 pixels de largura por 150 pixels de altura. Salve todas como JPEGs e certifique-se de que a caixa "progressive" ("progressiva") não esteja marcada. Salve todas as quatro imagens na mesma pasta e nomeie-as imagem1.jpg, imagem2.jpg etc.

Bom. Outra característica mais que é nova no MX é que você pode carregar JPGs e outras coisas enquanto roda. Vamos fazer isto agora.

Cole estas ações debaixo das outras:
_root.createEmptyMovieClip("alvoFoto1", 200);
_root.createEmptyMovieClip("alvoFoto2", 201);
alvoFoto1._x=300;
alvoFoto1._y=200;
alvoFoto2._x=450;
alvoFoto2._y=200;
loadMovie("imagem1.jpg","alvoFoto1");
loadMovie("imagem2.jpg","alvoFoto2");

Vamos dar uma olhada nestas ações

As primeiras 2 linhas cria 2 novos movieclips (como antes) e lhes dá nomes de instância de "alvoFoto1" e "alvoFoto2". As próximas quatro linhas somente posicionam nossos novos movieclips no palco. Nas últimas 2 linhas você verá a ação loadMovie. O Flash MX permite que nós carreguemos jpgs do mesmo modo que você já podia carregar arquivos swf. Neste caso, estamos carregando cada imagem dentro de um alvo movieclip (ao invés de um nível) e o Flash alinha o canto superior esquerdo de nossas imagens com o ponto de registro dos movieclips "alvoFoto" que acabamos de criar.

Salve seu filme e então teste-o. Grande! Agora vamos adicionar ações nos nossos 2 botões finais, o que permitirá ao usuário mudar as imagens exibidas. Adicione isto abaixo de todas as outras ações.

imagem1Loaded = true;
imagem2Loaded = true;
botao3.onRelease = function() {
if (imagem1Carregada == true) {
loadMovie("imagem3.jpg", "alvoFoto1");
imagem1Carregada = false;
} else {
loadMovie("imagem1.jpg", "alvoFoto1");
imagem1Carregada = true;
}
};
botao4.onRelease = function() {
if (imagem2Carregada == true) {
loadMovie("imagem4.jpg", "alvoFoto2");
imagem2Carregada = false;
} else {
loadMovie("imagem2.jpg", "alvoFoto2");
imagem2Carregada = true;
}
};

Vamos ver esse código com mais calma

imagem1Carregada=true;
imagem2Carregada=true;

Simplesmente crie um par de variáveis.

Em seguida diremos ao Flash o que fazer se o botao3 for clicado. Isto, no entanto, é um pouco mais complicado. Queremos que o Flash primeiramente verifique se uma condição é verdadeira ou não e então faça uma das duas coisas de acordo. Neste exemplo, nós verificamos para ver se a imagem1 está carregada (via nossa variável imagem1Carregada). Se estiver, então o Flash carregará a imagem3 dentro da nossa alvoFoto1 e configurará nossa variável imagem1Carregada para falso. Se ela não for, então o Flash carregará a imagem1 dentro da alvoFoto1 e configurar a variável imagem1Carregada para verdadeiro. O que isto significa é que você pode ficar clicando no botão repetidamente e o Flash irá carregando imagens alternadamente. O código para o botao4 faz a mesma coisa.

Teste seu filme e clique em todos os botões.

Quase feito :)

Inserindo áudio

Vamos introduzir algum áudio. O Flash MX permite que carreguemos dinamicamente mp3s e é justamente isto que vamos fazer. Copie seu mp3 favorito na mesma pasta.

Mude o nome do seu arquivo mp3 para "arquivo.mp3".

Acrescente estas ações sob todas as outras.
mySound=new Sound();
mySound.loadSound("arquivo.mp3",true);
mySound.start(0,0);

A linha 1 cria um novo objeto som. A linha 2 carrega nosso "arquivo mp3" externo dentro deste objeto som e configura streaming (transmitir ininterruptamente) para verdadeiro. A linha 3 inicia nosso som. Teste seu filme. Se o som não funcionar, então tente um arquivo mp3 diferente.

OK, penso que é mais do que o bastante por agora :)

Espero que você possa ver algumas vantagens na utilização das capacidades "dinâmicas" do Flash MX (não menos de qual é a facilidade na qual você pode mudar áudio, imagens e texto sem ter até mesmo que abrir seu fla).

CONTINUE LENDO...

O que você já ouviu de mais romântico


O que você já ouviu de mais romântico


Às vezes fico imaginando o que uma pessoa poderia ouvir de mais romântico, que a tocasse, e confesso que às vezes isso me incomoda, pois nada é mais perturbador do que a duvida. Eu confesso que às vezes converso com as estrelas assim como Olavo Bilace você certamente me perguntaria agora o que eu elasdizem não é mesmo caro amigo leitor? E eu lhe diria algo que o deixasse emocionado ou emocionada, mas ainda assim eu teria uma duvida, se foi o que eu disse que lhe deixou emocionado ou se foi o fato de que foi dito por uma estrela. E novamente como nos deparamos com uma duvida é oportuno tentar explicar ainda que corramos o risco de não ser felizes nesta explicação pois viver seria correr risco, se esse risco não nos fizesse tão bem de forma que é na verdade um prazer. Colocando em miúdos seria; não são as palavras românticas, mas sim os atos por detrás delas ou ate mesmo as outras palavras por detrás delas ate mesmo as não ditas, apenas respiradas ou os olhares.Por exemplo, imagine um casal que vivia feliz e não sabia.Certo dia eles se separaram e depois de um tempo descobriram que eram felizes e que ambos se amavam.Contudo o rapaz já estava a beira da morte e a moça só podia vê-lo por uma janelinha de vidro.Uma de suas ultimas palavras foi pra elao seguinte;”eu preciso te contar uma coisa que é muito importante, desde que nos separamos eu pensei em você e vi seu rosto todos os dias ate este momento.” No caso acima esse seria para sempre a coisa, mas romântica para essa jovem, mas será que não foi por quequem disse foi uma pessoa a beira da morte? Essa pergunta permanece ate hoje sem resposta.







Nossa proposta é te ensinar a pensar e não darlhe respostas prontas, sinta-se satisfeito com a duvida.
“A duvida é o princípio do conhecimento e da descoberta"

CONTINUE LENDO...