Aulas de Flash 10 - FinalizandoÉ hora de finalizar o jogo e embrulhar o pacote
Viva! Nosso jogo está pronto! Mas peraí, não dá pra lançar do jeito que está e esperar sucesso!
Precisamos
de uma tela de carregamento, um menu, uma tela de game over, créditos,
etc. É hora de botar em prática tudo que já aprendemos e aprender as
últimas lições que precisaremos antes de começarmos a fazer nossos
próprios jogos livremente.
Antes de mais nada, temos que dar
mais espaço, todo o nosso jogo e programação estão em um quadro só e
precisamos inserir alguns antes.
Selecione os nossos dois
quadros, para fazer isso basta usar o método tradicional de dupla
seleção, clicando em um, segurando Ctrl e clicando no outro.

Agora
clique com o botão direito e selecione Insert Frame, ou melhor, utilize
o atalho F5. Adicione um punhado de frames para nos movermos melhor

Ainda com os quadros selecionados, arraste para onde quiser, eu os coloquei no 15 para dar bastante espaço.

Pronto,
todos os quadros antes do 15 estão em branco para fazermos tudo que
quisermos. Nem precisávamos de tantos quadros, mas é bom ter espaço pra
respirar.
Adicioniei mais Layers e sempre arrastando e
adicionando mais quadros, assim tendo espaço pro Pré Loader e pro Menu.
Você pode inclusive adicionar um Frame Label nsa Properties, que seria
basicamente uma etiqueta

Veja o resultado na Timeline

No
entanto, o que vai acontecer? O Pré Loader vai aparecer de fundo do
Menu. Isso remete às primeiras aulas sobre Keyframes e etc, podemos
resolver de várias maneiras, como apagando os frames que sobram, mas eu
preferi inserir um Blank Key Frame exatamente onde um termina e o outro
começa, que nada mais é do que um Quadro Chave em Branco.

E o resultado será esse. Não esqueça de adicionar também um Blank Key Frame na Timeline do Menu.

Bom,
começando pelo Pré Loader, provavelmente você não vai querer branco
como cor de fundo, então crie um quadrado comum, não precisa ser do
tamanho da tela.

Selecione-o
e veja nas Properties, lá você pode colocar o tamanho do seu quadro
diretamente, 550x400 nesse caso, e até posicioná-lo em 0 e 0, o que
automaticamente o alinhará com o centro. Há outras formas de fazer isso
caso precise alinhar um objeto, no menu Modify -> Align mas é
necessário marcar o To Stage para dizer que é em relação ao seu quadro.

É bom ter propaganda no seu Pré Loader, um bom jogo pode viajar muito e ser um bom veículo de marketing pro seu site.
Você
pode colar o logo do seu site (nunca vindo do Paint, ou sairá
invertido), mas precisa dar uma ajustada, pois o que pode parecer muito
bom na hora de colar pode sair bem feio na versão final. Clique com o
botão direito na imagem, que deve estar no formato Bitmap já que você a
colou, e selecioe Properties

Se
você vai mexer com uma imagem não muito adequada para isso, por
exemplo, aumentar um ícone pequeno, é bom marcar o "Allow smoothing"
que significa "Permitir suavizar", a diferença é gritante. E se você
estiver usando JPG é bom desmarcar o "Use document default quality",
traduzidndo, "Usar qualidade padrão do documento", e colocar a
qualidade no máximo, 100, ou vai ter que encarar aquela poluição em
volta.

Compare os dois resultados

Mas
você pode não querer mantê-lo em Bitmap, então você pode colocá-lo no
estilo gráfico vetorial do Flash. Vá em Modify -> Bitmap -> Trace
Bitmap

Dependendo
dos valores que você colocar nesta janela poderá ter uma imagem mais
precisa, porém maior, o segredo é encontrar o equilíbrio, como no som,
sendo que uma imagem bem convertida pode também ficar menor do que um
Bitmap.

Não
esqueça de transformar o Logo em Symbol para mais tarde. Prosseguindo,
crie um objeto de texto e escreva o endereço do seu site, marque-o como
Static Text

Lá
mesmo já é possível colocar um Link para o seu site. Do lado do Link há
uma lista de opções sobre como a janela será aberta quando o Link for
clicado. Por exemplo, _blank abrirá uma nova janela com o site do Link,
_parent abre na mesma página em que o arquivo está sendo visualizado,
mas caso haja frames no site, abrirá no principal, _self abre
exatamente na mesma janela do navegador e _top abre na janela de maior
nível caso haja frames.
Obviamente _blank é a opção que menos
incomodará os usuários querendo visitar o site sem sair do jogo, mas as
outras podem ser muito úteis na criação de sites em Flash.

E
como de costume já deu pra reparar que tem a forma fácil de fazer e a
forma que eu me divirto obrigando vocês a aprenderem, então digamos que
eu quisesse que ao clicar no Logo ele abrisse uma janela assim como o
texto. Sem dúvida não há um campo de texto aguardando para colocarmos,
então voltemos à programação.
A primeira coisa que temos que
fazer no entanto é brecar a nossa Timeline, pois agora temos uma
Timeline ativa e se deixarmos ela ficará andando do Pré Loader até o
Menu, até o jogo e então recomeçando.

Não
dava pra ser mais simples, não? O próximo comando é bem útil para
gerenciar cliques do Mouse diretamente em um Movie clip, o
onPress mas traduzindo,
ao Pressionardá pra ver que não é bem o que queremos, pois enquanto você mantiver o
botão do Mouse segurado, novas janelas serão abertas, então
utilizaremos um semelhante, mas que só será contado uma vez, o
onRelease traduzindo
ao Soltar
Apesar do nome
getURL não parecer bem o que queremos, já que significa
pegar URLainda assim ele serve para abrir páginas, seguido das mesmas
características que vimos para o Link do Static Text, então, _blank
continua sendo o ideal. Mas como você se lembra da colisão do tiro com
o inimigo, é uma caixa muito ampla, então dentro do Symbol Logo eu
criei outro Symbol no formato só do círculo e dei a ele o nome de
Clicavel
Bem fácil comparado ao que fazíamos algumas aulas
atrás, não? Vamos relembrar os bons tempos então programando o Pré
Loader propriamente dito. Mas antes, crie uma barra para ser a nossa
barra de progresso. Você pode desenhar com contorno e fundo e depois
converter os dois em símbolos diferentes, usando o fundo para mostrar
quanto já foi carregado e o contorno para mostrar o total.
Um
ponto importante é colocar o Registration na esquerda, para que a barra
avance da esquerda para a direita. Se colocado no meio, a barra se
estenderia do meio para as pontas, não é um efeito ruim, mas é pouco
tradicional. Vale também lembrar que seu primeiro frame não pode ser
muito pesado, pois se demorar demais para carregar o Pré Loader, as
pessoas podem achar que o Link está quebrado.
Vamos abrir um novo
this.
onEnterFrame aqui. Na verdade criar um Pré Loader é bem fácil tecnicamente graças a dois códigos, o
getBytesTotal() do inglês
pegar Total de Bytes, que retorna um valor numérico do tamanho do seu arquivo em Bytes e o
getBytesLoaded() que significa
pegar Bytes Carregados que retorna um valor numérico de quantos Bytes do seu arquivo já foram carregados.
Ou
seja, para obter uma porcentagem basta dividir os carregados pelo total
e multiplicar por 100. Como vamos usar esse valor mais de uma vez,
atribuirei ele a uma variável chamada porcent.

E
agora basta usar a cabeça, se temos uma barra e temos um comando que
pode torcê-la à nossa vontade através de porcentagens, que caso você
não lembre, é o
_xscale basta fechar o pacote

Mas
além da barra eu queria também mostrar a porcentagem e não queria que a
passagem de frame fosse automática, queria que o usuário clicasse em
"Começar". Para tanto, eu criei um objeto de texto que fica em cima da
barra, com letras brancas, mas este não era Static Text, mas Dynamic
Text, o que permite que eu dê a ele um nome de instância e altere o que
está escrito nele como altero o valor de uma variável. O chamei de
porcentagem.

O .
texté usado para mudar exatamente as propriedades de texto da variável,
lembrando que porcent é o nome da variável que já mostra a porcentagem
da expressão (
getBytesLoaded() /
getBytesTotal()
) * 100 mas esse valor é extremamente quebrado, então teríamos valores
como 1,42308980% que não são vistosos nem necessários, para isso usamos
o
Math.
round que arredondará para o valor inteiro mais próximo e colocamos, em formato de texto, o sinal de porcentagem.
Sempre
que se coloca um texto no seu jogo é uma boa desmarcar a caixa
Selectable, traduzindo, Selecionável, já que esta permitiria que um
usuário selecionasse o texto clicando e arrastando com o mouse por
cima, dando um efeito bem feito

Aproveitando
este mesmo objeto, eu o tranformei em Symbol, Movie Clip para ser mais
exato, o chamando de comecar para que eu possa detectar cliques nele, e
para alterar a parte de texto, que foi para dentro do Symbol, eu só
preciso chamar comecar.porcentagem.
text e com isso fica bem fácil pensar numa forma de mostrar a porcentagem e quando chegar a 100%

E então quando tiver carregado, permitiremos que o jogador clique para ir ao Quadro 10, onde está o Menu. Ao usar o
gotoAndStop não precisaremos botar um
stop(); no Quadro 10 como precisamos colocar nesse

Ok,
tecnicamente está pronto para testarmos, não fosse um pequeno
problema... o arquivo está em nosso HD, já está carregado! Bom, teste
normalmente pressionando Ctrl + Enter e vamos ver como resolver.
No Player em que nosso jogo abriu clique no menu View e veja a conveniência que temos à nossa disposição.

Clique
em Simulate Download para simular como seria se você estivesse baixando
o jogo. Recomendo botar uma conexão fraca, já que nosso jogo é pequeno
e carregaria a jato em uma DSL.
Sabendo adicionar quadros e usar o
gotoAndStop não há segredos restantes no Menu ou no Game Over, basta fazer uma tela ao seu gosto e viajar pela Timeline.
Fica
faltando somente um detalhe, como se comunicar entre todos esses
quadros separados. Os macacos velhos já devem saber do que eu estou
falando, Variáveis Globais.
Por exemplo, se após o Pré Loader e
o Menu eu quisesse inserir uma tela de seleção de dificuldade, eu
precisaria dar um jeito da escolha feita nessa tela chegar ao quadro do
jogo, e se eu simplesmente criasse uma variavel chamada dificuldade,
ela não existirá no quadro do jogo, existirá somente no quadro da
seleção de dificuldade. Eu preciso criar uma variável Global, para todo
o jogo, usando
_global.dificuldade e assim poderei chamá-la e alterá-la em qualquer quadro. Você não pode usar o
var na frente, ao criar uma variável global.

Mas
eu estava escondendo um segredo até agora. Você pode ter só aprendido
Variáveis Globais agora, mas esta não é o primeiro elemento global que
você aprendeu. O que eu não disse até agora é que
functions também são globais. Mas e aí, o que muda?
Se uma
functionestiver ligada a um elemento que só existe em um único quadro, como
variável ou movie clip, você não precisa se preocupar, porque ela não
teria a base lógica para ser executada de qualquer jeito. Mas se você
tiver usado um termo mais geral, ou uma variável global, a sua
function,
digamos, que você colocou no menu para mostrar um efeito gráfico
bonito, pode aparecer no meio da sua tela de seleção de dificuldade ou
até do jogo propriamente dito.
Caso sua
functionesteja funcionando no quadro errado, você pode inserir uma linha de
código que a limite toda a um único quadro. Por exemplo, digamos que
meu menu tenha sido colocado no quadro 10.

O
_currentframe,
traduzindo, quadro atual, retorna o valor numérico do quadro onde, no
caso, o nosso "filme" está. Isso pode ser usado para verificar o quadro
em que vários objetos estão, e isso pode ser muito útil, por exemplo,
imagine o Hadouken, que só sai da mão no segundo ou terceiro quadro,
diferent de um tiro, que é disparado de imediato.
Existe um
operador, justamente o contrário do == que é o != ou seja, enquanto ==
significa igualdade, != significa diferença. então você pode tanto
dizer "só aconteça no quadro 10" com == como também limitar "não
aconteça se o quadro for diferente != de 10".
Isto porque
functions não serão as únicas coisas transitando indesejadamente pelo seu jogo. Lembra-se quando adicionamos objetos através do
attachMovie? e utilizamos o comando
_root.
getNextHighestDepth()
para determinar sua profundidade? Bom, quando fizemos isso, os tornamos
praticamente globais, e ao viajar pela timeline, eles ficarão colados
na tela onde não devem. Lembre-se de removê-los antes de inserir
códigos que mudarão de quadro, ou eles te perseguirão.
Lembra-se
quando eu falei para deixar alguns objetos fora do seu quadro para o
futuro? Há uma chance que quando seu jogo for espalhado pela internet,
apareça em sites onde o tamanho da tela deles não será o mesmo do seu
jogo, podendo ser maior ou menor. E como evitar que as pessoas vejam as
coisas que você deixou do lado de fora da área de jogo? Para isso
usamos o recurso Mask.

O
Mask, como a tradução do nome diz, é uma máscara, mas pense do lado de
quem a usa. Imagine que você colocasse uma máscara sem um buraco para
os olhos, você não enxergaria nada. O que fazemos então? Recortamos um
buraco para os olhos na nossa máscara.
Crie um retângulo, não
importa o tamanho, nem o traço, só o conteúdo conta para a Mask. Agora
selecione-o e altera o Width (largura) e Height (altura) para serem as
mesmas da janela do seu jogo, e coloque-o em 0 para X e Y.

É
necessário também arrastar todos os layers que você quer que fiquem por
trás dessa Mask para dentro dela. Basta clicar no layer e arrastar até
o layer Mask, você vai saber que deu certo quando eles mudarem de
aparência.

Há
dois detalhes sobre Masks, o primeiro é o mais incômodo, é que objetos
de texto dinâmico, Dynamic Text, ficam por trás dela, algo que pode ser
resolvido transformando-os em Symbols e aplicando algum efeito gráfico,
ou você pode inserir Blank Keyframes, quadros em branco no meio da sua
Mask para que naquela parte, ela não atue.

Outro detalhe, objetos criados com profundidade de
_root.
getNextHighestDepth() estarão acima da Mask, e portanto não desaparecerão fora da área de jogo.
Agora chegou a grande hora, publicar o arquivo final do seu jogo.
Se
você quiser ajustar as opções de publicação, vá em File > Publish
Settings, ou o atalho Ctrl + Shift + F12, em Type, caso não esteja
marcado, marque Flash (.swf), e se quiser veja as opções que tem para
esse tipo de arquivo na guia Flash que surgirá do lado de Formats.
Quando estiver pronto, vá em File > Publish, ou o atalho Shift +
F12. Seu jogo está agora pronto, em uma versão SWF para ser espalhada
por toda a internet.
Lembre-se que seu jogo tem que ser
interessante, não queira só pegar uma fatia do bolo já existente,
desenvolva idéias originais, incremente o que você já tem para que as
pessoas estejam motivadas para jogá-lo. Tudo que você aprendeu pode ser
usado para melhorar seu jogo. Alguns
ifs aqui e ali e você pode criar ótimas variedades na sua jogabilidade.
O
resultado deste tutorial foi o jogo online chamado "Doubutsu" que pode
ser jogado na CasaDosJogos, cujo código fonte em aberto acompanha esta
aula. Tudo que está no código foi ensinado nas aulas, então dê uma
estudada nele. Não se esqueça de mencionar todos que te ajudaram nos
créditos, não tem graça nenhuma ser o único nome lá. Espero que tenham
gostado e até uma próxima vez.

Creditos ao autor
: Captain