Segunda-feira, 05 de junho de 2006 às 14h27

Game Design

Hoje vamos entender um pouco sobre como funcionam Games no Flash. Este artigo é o primeiro de uma sequência não linear (nesta série não comentarei sobre tipos de games, nem como prós e contras de desenvolver um game em Flash).

Primeiramente, vamos entender uma coisa: o Flash, ao contrário do que muitos pensam, não possui dezenas de efeitos prontos. A maioria, ou os melhores, deles são desenvolvidos usando ActionScript. Mas isso não significa que são códigos prontos, e sim muita lógica e matemática.

No desenvolvimento de games "perfeitos", devemos utilizar de várias fórmulas (sim, aquelas que todos lembramos da época escolar) como, por exemplo, aceleração, gravidade, encontrar a distância entre dois pontos, etc. Tudo isso envolve cálculos matemáticos com suas respectivas fórmulas e, neste artigo, começaremos a estudar um pouco mais a fundo sobre essa área tão interessante, que, com certeza, aperfeiçoa inclusive nossos códigos em web-sites e sistemas em Flash, proporcionando ao desenvolvedor entender e criar classes próprias como Bounce, Regular, Elastic, Fly, Zoom, entre outras.

Neste exemplo, vamos fazer um objeto que segue o mouse, como se estivesse "olhando" para ele.

Pré-Requisitos

Este artigo foi desenvolvido para usuários experientes do Flash, qualquer um pode fazer pois está passo-a-passo, mas seria interessante conhecer um pouco a linguagem ActionScript. O nível é Intermediário/Avançado.

Arquivo final

Objetivo

Aperfeiçoar técnicas de programação dentro do Flash 8.

Conteúdo

No Flash 8, abra um novo documento em branco, ou melhor, pegue papel, lápis e régua.

Para entender o exemplo acima, necessitamos entender inicialmente de trigonometria, seria bem legal ler um pouco sobre isso em livros esquecidos da época da escola, sim, vocês certamente lembrarão agora daquele negócio de "pra que aprender isso? Nunca vou usar na vida!".

Bem, voltando, estávamos questionando o porquê de aprender trigonometria. Trigonometria é a base de um game, é ela quem nos permite calcular colisões de objetos, aceleração, frenagem, calcular novas trajetórias para objetos, calcular ângulos, disparar tiros para determinados (e específicos) lugares, etc. Iremos ver isso constatemente nesta série.

Coordenadas Cartesianas

O Flash tem um sistema de coordenada cartesiana diferente do visto no colégio. Porém, a única mudança é no eixo y onde os valores positivos são incrementados para baixo e não para cima, ou seja, o inverso de nossa imagem abaixo:

Inclusive, entendendo esse tipo de assunto, facilita muito o entendimento de classes novas no Flash 8 como Point, Rectangle e Matrix.

Ângulos

Ângulos no Flash são utilizados de duas formas no Flash, com a propriedade _rotation da classe intrinsica MovieClip ou com funções trigonométricas. Ângulos são geralmente calculdados em grausº e possuem valores entre 0º e 360º.

Esses graus podem ser utilizados para fazer um relógio analógico, rotacionar um objeto, etc. No nosso caso servirá para seguir o mouse. Só encontramos um detalhe nesse caminho: no Flash, em todos os cálculos gerais para ângulos, necessitamos de radianos, nunca graus (com exceção a propriedade _rotation). Para isso, necessitamos da fórmula de conversão (radianos para graus ou o oposto).

Graus para Radianos: novoAngulo = angulo*(Math.PI/180);
Radianos para Graus: novoAngulo = angulo*(180/Math.PI);

Para o nosso caso

O mouse e a posição do eixo formam uma diagonal (hipotenusa), e podemos traçar duas retas perpendiculares que formam um triângulo (catetos). Basicamente, precisamos calcular a razão entre os catetos, catetoOposto(co)/catetoAdjacente(ca).

Isso nos dá a tangente do ângulo. Calculamos então o arco tangente (Math.atan) da tangente (tn), que nos dá o ângulo em radianos(ar). Tranformamos de radianos pra graus (grau = rad/(PI/180))

co = _root._xmouse-obj_mc._x;
ca = Math.abs(_root._ymouse-obj_mc._y);
tn = co/ca;
ar = Math.atan(tn);
an = ar/(Math.PI/180);
obj_mc._rotation = an;

Para facilitar nosso código, vamos fazer isso de maneira um pouco mais enxuta. Agora sim, no Flash, num documento em branco:

Desenhe um círculo com cor gradiente apontando para um dos cantos, de preferência o lado esquerdo:

Instancie o objeto com o nome de circle. Crie um layer de Actions e digite o código:

var circle:MovieClip;
onMouseMove = function ():Void {
var xPos:Number = circle._x-_xmouse;
var yPos:Number = circle._y-_ymouse;
//A diferença está aqui, não precisamos criar neste caso uma variável para armazenar a tangente, utilizamos o método atan2 e passamos os dois parametros para que ele calcule a tangente
var angle = Math.atan2(yPos, xPos);
//Conversão de radianos para graus
angle = angle*180/Math.PI;
circle._rotation = angle;
};
//Isso aqui é um incremento ao documento, serve para o objeto seguir a posição clicada pelo usuários nos eixos x e y
onMouseDown = function ():Void {
xFind = _xmouse;
yFind = _ymouse;
onEnterFrame = function ():Void {
circle._x += (xFind-circle._x)/10;
circle._y += (yFind-circle._y)/10;
};
};

Execute e teste passando o Mouse em volta do MovieClip e clicando sobre o stage posteriormente.

A primeira parte da introdução acaba aqui. Espero que tenham gostado, dúvidas ou sugestões são bem vindas.

Abraços e até a próxima!

Download dos arquivos

15 comentários

 Maicon Martins
05/06/2006 15h30

Muito boa sua matéria...

Parabéns sua matéria fucou ótima!

 Paulo Maciel
06/06/2006 08h46

Boa

Já espero o próximo

 Carlos Humberto Cosenza
06/06/2006 16h27

PARABÉNS MEU VELHO!!!!

Arrebentou heim!!!! cara imaginando as diverssas aplicações deste arquivo agente acaba viajando legal. Parabéns mesmo pela força á toda galera inclusive com as explicações e comentários detalhados sobre a matéria inteira.

 Fabio Antunes da Paz
07/06/2006 10h37

Sou iniciante em Action Script

Bem legal mesmo! sou iniciante em Action Script, porém a compreensão não está dificil! Valeu!

 Tecnodata Trânstio Ltda Tecnodata Trânstio Ltda
08/06/2006 09h32

Grande Leandro!

Brother seu artigo está ótimo, mas vou apenas chamar a sua atenção para uma coisa, Game Design é algo totalmente diferente do que você escreveu no artigo, eu mesmo acessei pensando que era Game Design. Seu artigo é mais Game Developer. (ps: Game Design é documentação, história e roteiro de um jogo. Este profissional é o mais bem pago do mercado inclusive. Exemplo de um Game Designer famoso: Chris Crawford escritor deste livro: The Art of Computer Game Design)

Abraços

.: Luciano Augusto da Silva - Game Developer (contato@lucianoaugusto.com.br)

 Claudio Carneiro
09/06/2006 09h39

Ótima iniciativa...

Adorei a matéria e muito mais a iniciativa. Parabéns!

 adailton mesquita
10/06/2006 14h42

boa materia!!

como faço pro gradiente ficar indo pro lado q o mouse apontar!!
valeW
espero a resposta!!

 Fernando Peres Farto da Silva
10/06/2006 20h16

Boa matéria

Sempre tive interesse em criar meu próprio joguinho em Flash, mas nunca consegui. Parabenizo a iniciativa.

 Patricia Azevedo
14/06/2006 21h09

OTIMO

SOU INICIANTE EM ACTIONS EEU ADOREI MUITO, PARABENS...

 daniel hexsel
27/06/2006 10h08

Mercado

Olá,
muito interessante a matéria.
Gostaria de saber como o mercado absorve um profissional com uma qualificação em game design.
Obrigado

 daniel hexsel
27/06/2006 10h08

Mercado

Olá,
muito interessante a matéria.
Gostaria de saber como o mercado absorve um profissional com uma qualificação em game design.
Obrigado

 orlando leite
28/06/2006 12h37

Tutorial Games

Muito bom o tutorial, mas deixa a desejar quando já podia estar sendo mostrado a ultilização de funções como beginGradientFill para a criação do preenchimento fazendo tal efeito. Quanto a ligação com games, legal, acho que posso aconselhar ao pessoal dar uma passadinha em http://orlleite.googlepages.com lá existe um tutorial de jogos baseados em tiles muito bom que está sendo traduzido. Serve para as pessoas que querem realmente fazer jogos, seria interessante ter já um conhecimento basico sobre ActionScript. Flw.

 Pietro Cheldon
13/11/2006 14h04

Muito bom !!!

Muito bom Leandro, nota 10 para este artigo.

 Rúbia Gardini
19/06/2007 12h00

Muito bom

Mal posso esperar pelos próximos. Pra galera q curte games, indico tb o site www.gotoandplay.it

 Moisés Behn
21/03/2009 17h57

iniciante

onde posso encontrar conteudos para iniciantes em actionscript

obrigado

Cancelar resposta

Qual a sua opinião?

Faça login abaixo ou cadastre-se rapidamente.


Patrocínio:
Sobre o Autor
Leandro Amano É designer/desenvolvedor Adobe, iniciou sua carreira em 1999 e atualmente é Adobe User Group Leader, consultor e instrutor Oficial da tecnologia Adobe Flash e ActionScript na After Web e ENG DTP & Multimídia.

2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.