Criação de Games


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

Escrito por Marcio Silva on março 28, 2007. Arquivado em Flash. Você pode seguir as respostas a esse artigo pelo RSS 2.0. Você pode deixar respostas para esse artigo

32 respostas a Criação de Games

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

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

  3. esta faltando o da nave por favor coloca ele

  4. 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

  5. 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.

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

  7. 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))

  8. 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.

  9. 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

  10. 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.

  11. 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

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

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

  14. A sim gositei muito de soua iniciativa;

  15. 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

  16. 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

  17. 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

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

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

    Abraços

  20. 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!!!

  21. mas qual é exatamente o codigo da nave.

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

  23. Olá pessoal.
    Como faço para a nave inimiga atirar?
    já fiz o tiro para o inimigo usando os mesmo comando da nave .Testei usando os mesmos comando da nave para atirar e foi uma beleza.
    Mas quero fazer o inimigo atirar sozinho! Como faço?

  24. O seu primeiro codigo aparece que está cheio de erros no flash 8 será algo errado nele?

  25. temtei temtei mas não consegue pois as configurações das naves e inimigos estavam erradas

  26. Olá Marcio, não sei o que acontece, mas o código não funciona.

    Description: “This type of quotation mark is not allowed in ActionScript. Please change it to a standard (straight) double quote.”

    Abs,

    Paulo

  27. Olá galera, eu comecei a acompanhar este tutor agora, e já percebi um erro. A variável foi declarada como “cont2″ e na hora de atribuir o valor de “0″, foi utilizado “count2″(linha 4).
    Vou continuar, se achar mais alguma coisa eu deixo mais comentários.
    Vlw!

  28. Galera, o que está acontecendo de errado com o código de vocês, é que vocês estão copiando, não sei porque mas quando é copiado as aspas não são reconhecidas. O que fazer: onde tiver aspas é só apaga-las e digitar novamente que dá certo. Outra coisa que eu encontrei foi na quarta linha do primeiro script, a variável declarada como “cont2″, foi usada como “count2″, eu testei dos dois jeitos e não deu diferença, só para saber.
    Espero ter ajudado.
    Vlw!

  29. O erro esta que no fonte passado foram usados (¨) e na verdade era pra ser usado (“) entao tem que substituir todos os codigos incorretos e corrigi-los

  30. o Danilo esta correto!

  31. ola pessoal
    tentei fazer mas nao deu certo eu uso o flash mx nao sei se pode interferir
    se alguem tiver tutoriais avançados de criação de jogos porfavor me passem por email (andersondesign3d@gmail.com) gostaria muito aprender a fazer jogos de rpg em flash
    obrigado a todos!

  32. ola, sou novo em flash e gostaria de saber a diferença entre nome do movieclip e nome de instancia. E onde eu altero o nome de instancia.
    obrigado

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>