quarta-feira, 12 de dezembro de 2007

Tutorial 24: Furo

Veja o que está por trás de uma tela cinza, movendo o mouse sobre ela. Um furo, criado com máscara, revela a figura.



Leia mais! * Montagem
Crie ou importe uma figura.
Transforme-a em símbolo chamado 'imagem' (F8).
Apague o símbolo do palco.
Crie um novo símbolo chamado 'luz' (Ctrl+F8).
No símbolo, desenhe um círculo centralizado.
Abra a biblioteca de símbolos (Ctrl+L).
Clique com o botão direito em cada símbolo, escolha "Linkage" e habilite "Export for ActionScript" para cada um.

* Programação
Abra a janela de ActionScript (F9).
Na timeline do documento, clique no frame 1:
attachMovie("imagem", "imagem", this.getNextHighestDepth());
this.createEmptyMovieClip("mascara", this.getNextHighestDepth());
imagem.setMask(mascara);
mascara.attachMovie("luz", "luz", mascara.getNextHighestDepth(), {_x:-100, _y:100});

onMouseMove = function() {
mascara.luz._x = _xmouse;
mascara.luz._y = _ymouse;
};

quarta-feira, 5 de dezembro de 2007

Tutorial 23: Blocos aleatórios

Efeito de preenchimento utilizando blocos azuis que surgem aleatoriamente na tela.



Leia mais! * Montagem
Crie um bloco de tamanho 20x20.
Transforme-o em símbolo chamado 'quadro' (F8).
Apague o bloco do palco.
Abra a biblioteca de símbolos (Ctrl+L).
Clique com o botão direito no quadro, escolha "Linkage" e habilite "Export for ActionScript".

* Programação
Abra a janela de ActionScript (F9).
Na timeline do documento, clique no frame 1:
largura = 10;
altura = 10;
total = largura*altura;
ordem = new Array();
exibido = 0;

for (i=0; i<total; i++) ordem[i] = i;
for (i=0; i<total; i++) {
j = int(Math.random() * total);
k = ordem[i];
ordem[i] = ordem[j];
ordem[j] = k;
}

onEnterFrame = function() {
if (exibido<total)
attachMovie("quadro", "c"+exibido, this.getNextHighestDepth(), {_x:20*int(ordem[exibido]%largura), _y:20*int(ordem[exibido]/largura)});
exibido++;
if (exibido>total*2) {
for (i=0; i<total; i++)
_root["c"+i].removeMovieClip();
exibido=0;
}
}

domingo, 2 de dezembro de 2007

Jogo 5: Labirinto

Um labirinto simples. O personagem precisa apenas sair do labirinto usando as setas do teclado.



Ler tutorial! * Montagem
Crie um retângulo cinza de tamanho 25x25.
Transforme-o em símbolo chamado 'chao'(F8).
Crie um retângulo azul de tamanho 25x25.
Transforme-o em símbolo chamado 'parede'.
Crie um personagem de tamanho até 25x25.
Transforme-o em símbolo chamado 'heroi'.
Abra a biblioteca de símbolos (Ctrl+L).
Em cada símbolo, clique com o botão direito, escolha "Linkage" e habilite "Export for ActionScript".
No documento principal, crie mais 2 keyframes.
No terceiro keyframe, adicione uma caixa de texto escrito "Fim de jogo".

* Programação
Abra a janela de ActionScript (F9).
Na timeline do símbolo, clique no keyframe 1 e digite:
mapa = [
"1111111111",
"1000100002",
"1011101111",
"1000100001",
"1110001111",
"1011011001",
"1000000011",
"1111111111"]

iniciar = function() {
px = 1;
py = 5;
direcao = 0;
novadirecao = 0;
animar = false;
this.createEmptyMovieClip("cenario", this.getNextHighestDepth());
for (i=0; i<mapa.length; i++)
for (j=0; j<mapa[i].length; j++)
switch(mapa[i].charAt(j)) {
case '0':
case '2':
cenario.attachMovie("chao", "c"+i+"_"+j, cenario.getNextHighestDepth(), {_x:25*j, _y:25*i});
break;
case '1':
cenario.attachMovie("parede", "c"+i+"_"+j, cenario.getNextHighestDepth(), {_x:25*j, _y:25*i});
break;
}
attachMovie("heroi", "heroi", this.getNextHighestDepth(), {_x:25*px, _y:25*py});
Key.addListener(ouvinte);
}

finalizar = function() {
cenario.removeMovieClip();
heroi.removeMovieClip();
Key.removeListener(ouvinte);
}

ouvinte = new Object();
ouvinte.onKeyDown = function()
{
switch (Key.getCode()) {
case Key.UP: novadirecao = 1; break;
case Key.DOWN: novadirecao = 2; break;
case Key.RIGHT: novadirecao = 3; break;
case Key.LEFT: novadirecao = 4; break;
}
}
ouvinte.onKeyUp = function()
{ novadirecao = 0; }

onEnterFrame = function() {
if (!animar && novadirecao>0) {
if (novadirecao==1 && mapa[py-1].charAt(px)==1 ||
novadirecao==2 && mapa[py+1].charAt(px)==1 ||
novadirecao==3 && mapa[py].charAt(px+1)==1 ||
novadirecao==4 && mapa[py].charAt(px-1)==1) return;
animar=true;
direcao = novadirecao;
}
if (animar) {
switch(direcao) {
case 1:
heroi._y-=3;
if (heroi._y<=(py-1)*25) {
py--;
heroi._y = py*25;
animar = false;
}
break;
case 2:
heroi._y+=3;
if (heroi._y>=(py+1)*25) {
py++;
heroi._y = py*25;
animar = false;
}
break;
case 3:
heroi._x+=3;
if (heroi._x>=(px+1)*25) {
px++;
heroi._x = px*25;
animar = false;
}
break;
case 4:
heroi._x-=3;
if (heroi._x<=(px-1)*25) {
px--;
heroi._x = px*25;
animar = false;
}
break;
}
}
if (mapa[py].charAt(px)=='2')
gotoAndStop(3);
}
Clique no keyframe 2 e digite:
stop();
iniciar();
Clique no keyframe 3 e digite:
stop();
finalizar();