Criação de Games

Publicado por Marcio Silva em 28/03/2007

Criação de games

Olá pessoal,

Que tal começar a aprender a arte de criar aqueles joguinhos bem legais feitos em flash? Começarei uma sequência de tutorias que mostraráo os mais importantes fundamentos para começar a desenvolver um game.

Pré-requisitos:

Conhecimento básico em ActionScript

Objetivo:

capacitar os leitores quanto aos aspectos referentes a comandos básicos para a movimentação de um personagem, mapa de tiles, detecção de colisão, gravidade, fricção entre outros. Todos esses fundamentos são muito importantes para a construção de games divertidos.

Mas vamos por partes, primeiramente abordarei neste tutorial um fundamento muito importante e muito básico que é a movimentação de persogagens e um início de detecção de colisão.
No fim desse tutorial teremos feito um joguinho simples como o que está abaixo.

Então vamos ao que interessa!

Crie um novo arquivo (CTRL+N)

Dê um clique no primeiro frame e coloque o código abaixo

var cont:Number = new Number();
var cont2:Number = new Number();
cont=0; //contadores de tiros
count2=0; //contadores de explosões
onEnterFrame=function()
{
/*verificamos quais teclas o usuário está precionando
E também verificando quais os limites da tela
*/
if(Key.isDown(Key.LEFT) && nave._x >=20)
nave._x -=20;
if(Key.isDown(Key.RIGHT) && nave._x <500)
nave._x +=20;
if(Key.isDown(Key.UP) && nave._y >20)
nave._y -=20;
if(Key.isDown(Key.DOWN) && nave._y <330)
nave._y +=20;}

onMouseDown = function()
{
/*quando ocorre o clique do mouse, mostra um tiro saindo da nave*/
_root.cont++;
_root.tiro.duplicateMovieClip(”tiro”+_root.cont,_root.cont,_root.cont); //duplicamos o tiro
/*fazemos com que a réplica apareça na frente da nave*/
_root["tiro"+_root.cont]._y = nave._y+10;
_root["tiro"+_root.cont]._x = nave._x+10;
}

Observações referentes ao código

Quando o iniciar o joguinho a função onEnterFrame é invocada, ela fica esperando o pressionamento de teclas, e toma as decisões necessárias para a movimentação correta do personagem que iremos criar logo abaixo. No código também tem uma função que serve para capturar cliques do mouse na tela (onMouseDown). Quando ocorrer um clique será fieta uma duplicata do movieclip chamado tiro.

Criação dos movieClips para o jogo (tiro, inimigo, nave e explosão)

Vamos criar agora o movieClip que representará o tiro. Crie um círculo fora do stage, de modo que ele não apareça na animação final. Selecione-o e pressione F8, para transformar em movieClip.Dê o nome de tiro. Certifique-se que o movieClip círculo se chama realmente tiro. Para issso basta clicar no círculo e verificar na barra de propriedades.

Agora clique no círculo e coloque o código abaixo:

onClipEvent(enterFrame)
{
if(_name != “tiro”)//verificação que serve para que sejam executados apenas as cópias do tiro, não o verdadeiro
{
this._y-=30;
if(this._y <0)//se o tiro passou do y=0 removemos o tiro
this.removeMovieClip();

if(this.hitTest(_root.inimigo)) //verifica se tiro colidiu com o inimigo
{
_root.inimigo.life=0; //zeramos o life, um tiro só é fatal
this.removeMovieClip(); //sumimos com o tiro da tela
}
}
}

No código, é importante destacar o uso do método hiTest(), que é muito importante para a detecção de colisão. Ele é responsável em dizer se dois movieClips colidiram ou não.

Agora criaremos a nave que pilotaremos, no nosso caso é só um quadradinho. Da mesma forma que você criou o tiro, crie 2(dois) quadradinhos, um ficará na parte superior fora do stage e outro dentro do stage na parte inferior.Ttransforme-os em movieClips e nomeie o que está no stage de nave e o que está fora de inimigo. Por fim faça a figura que respresentará a explosão, ficará próximo ao movieclip tiro. Chame-a de explosão. Veja como nosso stage ficará abaixo:

Agora vamos so código do inimigo, dê dois cliques no inimigo. No primeiro frame coloque:

var life:Number = 100;

Esse é o life do inimigo. Agora volte à cena principal e selecione o inimigo. Aperte F9 depois coluque o seguinte código:

onClipEvent(enterFrame)
{
/*Verificamos se o inimigo morreu, vendo se o seu life é menor ou igual a zero*/
if(life<=0)
{
_root.cont2++;
/*Criamos uma explosão, pois o inimigo morreu*/
_root.explosao.duplicateMovieClip(”explode”+_root.cont2, _root.cont2,_root.cont2); _root["explode"+_root.cont2]._x = this._x;
_root["explode"+_root.cont2]._y = this._y;

this._x = random(300); //o inimigo volta numa posição randômica
this._y = -150;

this.life = 100; //voltamos o life do inimigo

}
else
{
this._y+=10; //avança o inimigo em sua direção
if(this._y > 300) //verifica se o inimigo ultrapassou o limite máximo da tela
{
/*Se o inimigo ultrapassou sua nave, vc pode fazer o que quizer a partir daqui
eu optei por fazer o inimigo começa de novo a descer.
*/
this._y = -20;
this.removeMovieClip();
}
}
}

O código acima indica que quando o life do inimigo acabar vai ser feita uma duplicata do movieClip explosão que vai aparecer exatamente no local onde houve a colisão com o tiro. Senão ocorre colisão alguma ele entra no else e continua avançando em direção à nave que controlamos.

Por fim o código da explosão:

onClipEvent(enterFrame)
{
/*essa verificação serve para que apenas as explosão que serão criadas dinamicamente
sejão executadas*/
if(_name != “explosao”)
{
if(this._alpha > 0) //serve para dar um efeito de explosão
this._alpha -= 5;
else
this.removeMovieClip();
}

}


Bem similar so código do tiro a explosão só com as duplicatas, aplicamos apenas uma diminuição no alpha até que chegue a zero aí deletamos a instancia duplicada da explosão. Se tiver seguido corretamente os passos, o joguinho está pronto!Use sua criatividade para fazer variações desse exmplo. Divirta-se!

Espero que tenham gostado. Até a próxima.

Autor: Márcio Silva – Colunista Flash do Portal MXSTUDIO

Em caso de dúvidas acesse o tópico do artigo no fórum de Desenvolvimento de Jogos em Flash do MXSTUDIO:

http://www.mxstudio.com.br/forum/index.php?showtopic=39826


Assine o nosso Feed
1.237 assinantes,
assine você também!
Publique esse artigo no Twitter Salve este artigo no Delicious Cadastre esse artigo no Dihitt Cadastre esse artigo no UEBA Cadastre esse artigo no Rec6

Marcio Silva

Formado em Ciência da Computação pela Universidade Federal de Mato Grosso do Sul (UFMS) em 2007. Atualmente faz o curso de mestrado em Ciência da Computação na UFMS. Atua como Analista de Sistemas.

22 usuário comentou em " Criação de Games "

Assine o Feed de Comtentários ou URL de Trackback

carlos disse,
Enviado em 22-05-2008 às 10:15 pm

estou usando o flash8 e o codigo asima nao fonsiona me parece que esta faltando ocodigo da nave
nao acontese nada com a nave

edilson disse,
Enviado em 01-06-2008 às 5:33 pm

estou usando o flash 6 ae por favor explica melhor oque e frame

edilson disse,
Enviado em 24-07-2008 às 4:47 pm

esta faltando o da nave por favor coloca ele

adrianoduende disse,
Enviado em 04-08-2008 às 12:24 am

OPAA!
Alô galera, sou novo no action scrpit
gostei do xemplo acima para treinar
boa iniciativa de ajuda para os iniciantes
porém não funciona ….está faltando alguma coisa..
já estou a horas , vá rias tentativas no flashMX
AGORA VOU TENTAR no flash8-seria bom também divulgar a versão do programa utilizado-ajudaria bastante-valeu

Marcio Silva disse,
Enviado em 10-08-2008 às 3:02 pm

Olá Pessoal,

São necessárias apenas duas coisas, para que a nave se movimente, o código do frame 1 que está no tutorial acima, e o mais importante: colocar o nome de instância da nave de “nave”, muita gente confunde o nome do movieclip com nome de instância, é o erro mais comum. Eles não são a mesma coisa.

No artigo não é objetivo ensinar a usar o Macromedia Flash (Utilizei o Macromedia Flash 8 ) para dar nomes de instâncias. Uma pequena busca no google e verão tutoriais referentes a esse tema.

Abraços.

Guilherme disse,
Enviado em 18-08-2008 às 3:46 pm

para quem não sabe frame é o mesmo que quadro. gostaria que indicasse um tutorial para programar jogos 3d em flash, obrigado!

MHJ disse,
Enviado em 24-09-2008 às 10:35 am

Pelas dificuldades que li nos comentários,enquanto fazia o joguinho do tutorial, com o intuito de ajudar, fiz um roteirnho com algumas coisas que poderia ter no tutorial para facilitar o aprendizado.

- Pelo fato de ter muita gente que copia o código da página e cola direto no flash, avisar que as aspas duplas devem ser trocadas para não dar um monte de erros.
- mostrar a barra de propiedades depois da criação de cada movieclip
- Agora vamos so código do inimigo, dê dois cliques no inimigo, (seria bom lembrar que cada movieclip tem sua própria linha de tempo, (pelos níveis dos comentários, deve ter usuários que não devem saber ao certo))

MHJ disse,
Enviado em 24-09-2008 às 10:39 am

Ahh! o nome da instância do movie clip explosão é explosao (está no código)
Tirando esses detalhes, o código do tutorial não deveria dar nenhum problema, no meu caso funcionou perfeitamente.

Leonardo disse,
Enviado em 06-10-2008 às 5:37 pm

no meu deu quase tudo certo…
antes não dava nada certo depois fiz oque o MHJ disse falou e deu certo mas uma coisa não acontece
quando eu uso as teclas left/ right/ up/ down/ . ^. \/.e o click do mouse não acontece nada fika parado a nave fica parada mesmo eu apertando as teclas
se alguem puder me ajudar meu email eh
nightfire92@hotmail.com
obrigado

mhjmhj2002 disse,
Enviado em 09-10-2008 às 11:12 am

Leonardo:
não dá pra te ajudar sem dar uma olhada no que vc fez, vou enviar pro seu e-mail o meu arquivo pra vc dar uma olhada. Se ainda assim não conseguir dar um jeito me envia o que vc fez pra dar uma olhada e te ajudar.

Guilherme disse,
Enviado em 25-11-2008 às 11:18 pm

Olá caro, belo tit deu certo aqui, porém tentei fazer uma colisão com a “nave” quando o “inimigo” acerta ela, coloquei a ação

~ var life:Number = 100; ~

na “nave” e

~ 1. onClipEvent(enterFrame)
2. {
3. /*Verificamos se o inimigo morreu, vendo se o seu life é menor ou igual a zero*/
4. if(life<=0)
5. {
6. _root.cont2++;
7. /*Criamos uma explosão, pois o inimigo morreu*/
8. _root.explosao.duplicateMovieClip(”explode”+_root.cont2, _root.cont2,_root.cont2); _root[”explode”+_root.cont2]._x = this._x;
9. _root[”explode”+_root.cont2]._y = this._y;
10. this._x = random(300); //o inimigo volta numa posição randômica
11. this._y = -150;
12. this.life = 100; //voltamos o life do inimigo
13. }
}

na “nave”, mas concerteza não era pra fazer isso não e ?!

oque devo fazer ?!

obrigado

guilherme_accioly@hotmail.com

luan disse,
Enviado em 05-12-2008 às 10:38 am

cara nao to entendendo o que vc quer diser com primeiro frame
estou usando Flash Mx

Gedmilson disse,
Enviado em 18-01-2009 às 4:18 pm

Eu não entendi uma coisa para cada objeto tem ser ser feito um frame ou só basta mesmo o primeiro e pronto.

Gedmilson disse,
Enviado em 18-01-2009 às 4:19 pm

A sim gositei muito de soua iniciativa;

Thomas_Aguiar disse,
Enviado em 23-01-2009 às 3:55 am

Bem pessoal, já trabalho com games em flash faz algum tempo, fiz o exemplo deste tutorial para publicar o código fonte a quem não conseguiu, publiquei o código fla no endereço abaixo, este exemplo foi feito no flash mx, mas funciona perfeitamente no flash 8 e ou posterior.

Deu um total de 17 kb entao naum se assustem pensando que é virus que está no formato .fla

http://www.4shared.com/file/82062893/76110e89/exemplo_do_site_flash_mxstudio.html

Bruno disse,
Enviado em 02-03-2009 às 4:09 pm

Eu não entendo o uso das duas variáveis cont e cont2. Sem elas é impossível duplicar o tiro e as explosões? Porquê?
Tentei fazer um exemplo mais simples, onde eu arrastava uma bola (startDrag) e passava por cima de um quadrado. Nesse momento a bola deveria voltar para o lugar de origem. Meu código ficou assim

bola.onPress = function () {
startDrag(bola);
};
bola.onRelease = function () {
stopDrag();
};
if (bola.hitTest(_root.quadrado) {
stopDrag();
bola._x = “posição original x” :P
bola._y = “posição original y” :P
// agora não lembro dos numeros x e y
};

Bom. Para poder pegar a bola. Tive que transforma-la em Button. E o quadrado é um MovieClip. Mesmo soltando a bola ela não volta aposição original :P

joao disse,
Enviado em 21-04-2009 às 7:54 pm

eu fiz esse jogo tudo certo mas quando eu vou atirar a nave muda de lugar em vez de eu atirar e a nave explodir PQ?
me ajudem por favor

euri disse,
Enviado em 19-05-2009 às 1:33 pm

eu queria saber como faço para colocar mais de um inimigo.
ja tentei o mesmo codigo usado no outro mas ñ deu certo.

CrazyMania disse,
Enviado em 23-05-2009 às 11:48 am

Eu estou procurando uma equipe para desenvolvimento de jogos e queria negociar com você. Me adicione no msn: crazymania@crazymania.com.br

Abraços

Komodo disse,
Enviado em 23-06-2009 às 10:25 am

Olá pessoal….
Também achei esse tutorial o máximo, parabéns Márcio pela iniciativa.
O que acontece é que na minha tentativa, miha nave funciona perfeitamente inclusive os tiros, porém o inimigo não aparece de forma alguma.
Alguém pode me ajudar? Meu e-mail é:
luiz_fernando_ata@hotmail.com.

Se alguém puder enviar um arquivo que funcione normalmente eu agradeço.
Abraços!!!

heirrio disse,
Enviado em 11-09-2009 às 2:38 pm

mas qual é exatamente o codigo da nave.

veltinho disse,
Enviado em 18-11-2009 às 12:05 am

valew mãn perfeiito criei um jogo tipow cs apartii desse tutorial ;D

Deixe o seu comentário abaixo...

 Username (*required)

 Email Address (*private)

 Website (*optional)

 

MXStudio © 2003-2010. Todos os direitos reservados.
É expressamente proibido a cópia, reprodução e difusão dos textos, fotos e outros elementos contidos neste site sem autorização expressa do MXStudio.