O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

Criando um jogo de plataforma (3/5)

Iniciado por MayLeone, 01/12/2012 às 11:21

[box class=titlebg]Criando um jogo de plataforma p3 (estrutura)[/box]
[box class=catbg3]Se você chegou a esta parte do tutorial, sem titubiar, e entendendo passo à passo, parabéns! Você está pronto (a) para seguir em frente. Do contrário, sugiro que releia as outras partes do tutorial para sanar as suas dúvidas, e seguir em frente sem dificuldades de entendimento.

Muito bem! já temos os recursos básicos, sabemos criar sprites, configuramos o database de acordo com o que necessita para com o script de plataforma, aprendemos um pouco sobre mapeamento de jogos em 2D, e algumas regras básicas do mesmo, e agora, finalmente chegou a hora de criar o seu jogo em si.
Inimigos, obstáculos, ataques, danos, menu, e muitas outras coisas...

Para acompanhar o tutorial a seguir, você precisará ter um certo conhecimento sobre os comandos de eventos, e seus jargões.
Usaremos switches, condições e variáveis para os comandos, por isso se você não sabe quase nada sobre eventos, preste bem atenção nas explicações e screens, para tentar entender melhor o que será feito a partir daqui.[/box]

[box class=titlebg]Sprites do player (configuração)[/box]
[box class=catbg3]Vamos começar com o básico e mais simples: Os sprites do player.
Como eu já disse, qualquer jogo de plataforma que se preze, tem seus sprites do personagem pulando, correndo (andando), morrendo, e se for o caso do seu game, atacando.
Aqui irei ensinar a configurar a mudança de gráficos de acordo com teclas pressionadas durante o jogo, para os eventers experientes essa parte do tutorial pode ser descartada, pois é muito simples de se configurar um comando desses, porém para os iniciantes é sempre bom mostrar algo novo.

As teclas no meu jogo serão as seguintes:

Letra A: ataque - letra S: personagem pula - letra D: pauser - tecla para baixo: personagem agacha.
Os sprites usados no tutorial serão esses:

Sprites respectivamente: sendo atingido por algum inimigo - caindo - correndo - atacando - pulando e abaixando.

Para começar a criar o evento de mudança de gráficos, seria melhor criar um evento comum, para isto.
Vá até o database na aba de eventos comuns, nomeie o mesmo como desejar, deixe em processo paralelo e escolha uma switch para ativação/desativação desse evento:


Agora em comandos de eventos, vamos fazer com que o personagem fique com o gráfico dele pulando quando pressionar S.
Faça o seguinte:
Crie uma nova var e coloque o nome que quiser, deixe a constante em 0 e marque a opção substituir.
Agora vá no comando Definir tecla e selecione a var que acabou de criar.
Feito isso, crie uma condição sem excessão. Coloque a var que você criou e deixe a constante igual a 15.
Agora coloque o comando mudar gráfico do personagem, e escolha o gráfico dele pulando, em seguida, coloque esperar 5 frames, e depois mudar gráfico novamente, só que dessa vez coloque o gráfico do personagem caindo, por fim coloque esperar 15 frames e coloque o gráfico do personagem correndo.


Fácil não é mesmo? agora apertando a tecla S, o personagem além de pular, muda o gráfico, fica com o gráfico dele pulando, depois caindo, e depois volta ao normal.

Você pode fazer isso com outras teclas também.
No meu caso, quando o personagem ataca, ele muda o gráfico e quando abaixa também, isso tudo pode ser feito no mesmo comando de evento.
Agora é só ligar a switch desse comando de evento no mapa, em processo paralelo, e pronto.[/box]

[box class=titlebg]Configurando o ataque:[/box]
[box class=catbg3]Seu personagem pula, muda de gráfico quando isso acontece e anda, mas... ele não ataca ainda.
Nós podemos criar dois tipos de ataques por eventos para o player causar danos nos inimigos no mapa. O primeiro jeito é apertando uma tecla; o personagem muda o gráfico para o dele atacando e se o ataque acertar o inimigo, ele morre. A outra maneira é com um sisteminha chamado"enterrada". Quem já jogou Mário Bros  deve saber do que estou falando. Você pisa em cima do inimigo e o enterra na plataforma.
Para ambos os sistemas iremos precisar de dois eventos fantasmas.
Vamos primeiro criar o evento do ataque de tecla.
Crie um evento no mapa sem gráficos e o deixe em processo paralelo. Crie agora uma nova página nesse mesmo evento e uma switch com o nome ''Player.atack'' ou o nome que preferir, ligue a switch nessa página e deixa-a em processo paralelo e sem gráfico também. Em comandos de eventos coloque a condição tecla e ponha para ser a tecla X (letra A no teclado, ou seja, quando o jogador apertar A o personagem atacará) deixe essa condição sem excessões.
Agora crie quatros vars. A primeira deve estar com o nome PlayerX (ou o nome que quiser) em operando deixe personagem >> coord.X (coordenada X do personagem). Na segunda faça a mesma coisa, só que o nome deve ser PlayerY e em operando personagem deixe na coordY. A terceira variável deve ter o nome de AtackX, em operando deixe ''este evento'' >> coord X. E na última (finalmente) Coloque o nome de AtackY, operando em ''este evento'' >> coord Y.
Pronto temos armazenados agora as coordenadas X e Y tanto do player quanto do evento do ataque. Até aqui, seu evento deve estar mais ou menos dessa forma:


Até aí tudo bem. Agora vem a parte de fazer com que o evento fique junto ao personagem, durante todos os lugares do mapa.
Para fazer isso, em baixo das vars nos comandos de eventos, chame o comando ''posição de evento''. Lá marque a opção ''este evento'' e especificar por variável. Nessa opção coloque as variáveis da Coordenada X do herói e da coordenada Y.
Ainda falta deixar com que quando o personagem acione esse evento, o mesmo não caia do mapa (isso ocorre graças ao script de plataforma) para evitar que isso aconteça, precisamos deixar esse evento com a gravidade zero. É simples fazer isso. Chame o comando chamar script e nele ponha isso:
$game_map.events[@event_id].gravity = 0

Pronto, seu evento não irá cair do mapa agora.
A próxima etapa é fazer com que o evento saiba quando o personagem está virado para a esquerda ou para a direita. Para criar esse comando faça o seguinte: crie uma condição sem excessão e na aba 3 de condições e efeitos, marque a opção personagem e a direção esquerda:


Ótimo! agora coloque o comando mover evento>> este evento>> olhar a esquerda.
Faça o mesmo processo com a direção direita.
Seu evento até agora deve estar assim:


Perfeito! Agora a última parte desse evento. Vamos fazer com que ele dê dois passos pra frente, para que o ataque tenha efeito e não fique grudado ao herói.
Chame o comando mover evento>> este evento e marque a opção ''ignorar se bloqueado''. Ponha a velocidade muito rápida e a frequência altissíma, e por fim dois ''avançar um passo''. Ponha o comando esperar terminar movimento e desligue a switch ''Player.atack''.
Prontinho... o evento de ataque está pronto, e ele deve estar mais ou menos desse maneira:


Legal, temos agora o evento do ataque, mas não temos a condição para que em determinado momento a swtich ''Player.atack'' fique on.[/box]


[box class=titlebg]Animação de ataque:[/box]
[box class=catbg3]Vamos criar a animação para o ataque e de quebra a condição de deixar a switch do ataque on.
Vá para o database, e em eventos comuns. No mesmo evento comum dos comando de mudança de gráfico do player, quando ele pula, podemos criar o comando de animação do ataque (para poupar eventos comuns).
Em comando de eventos, coloque a condição tecla X (sim, novamente) e ponha a switch ''Player.atack'' on.
Agora chame o comando mover evento >> personagem e avançar um passo e velocidade rapidíssima. Agora coloque a opção mudar gráficos e ponha o sprite 1 do seu char de ataque. faça isso com todos os seus sprites do char. Ponha esperar 4 frames a cada sprite, assim:
Spoiler
[close]

Só faça isso com primeira linha do char.
Agora coloque o gráfico do herói correndo.
Após fazer tudo isso coloque a velocidade em rápida. Dê ok, e depois na teceira aba dos comandos de eventos, coloque a opção ''mudar gráfico'' e ponha o gráfico do herói correndo. Na excessão coloque o comando mudar gráfico>> gráfico do player correndo e switch Player.atack off, assim:


Terminamos. Agora quando o jogador pressionar a tecla A, o herói mostra uma animação do personagem atacando, e claro ataca.

No caso aqui, você aprendeu a criar um evento de ataque em primeira pessoa, ou seja, pressionou A, o personagem atacou, se acertar o inimigo ele morre, do contrário nada acontece.
Porém se quiser criar um sistema parecido, só que dessa vez com o player atirando algum projétil, por exemplo, uma bola de fogo, pode fazer também. Um ataque à distância.
Eu, a um tempo atrás havia criado um sistema de projétil, então se quiser se utilizar dele para seu projeto, fique a vontade, é só baixar a demo clicando aqui.

Bom, agora temos o seu ataque em primeira pessoa, ou em distância (você que sabe) então agora podemos aprender como criar o sistema de enterrada.[/box]

[box class=titlebg]Sistema de enterrada:[/box]
[box class=catbg3]Esse sisteminha é bem conhecido pelos jogos de plataforma, aonde o herói pisa no inimigo, e o mesmo acaba sendo enterrado na plataforma e morrendo.
Confesso que ele me deu um certo trabalho, não para cria-lo (pois seu procedimento de criação é simples) ele me deu trabalho na hora de eu descobrir uma forma de planeja-lo. Como eu iria fazer com que, quando o player pisasse na parte de cima de um evento (que seria um inimigo) o mesmo se enterrasse na plataforma. Porém, ainda bem que eu bolei uma forma de criar o sistema e irei explicar aqui mesmo para vocês.
No caso aqui, eu não faço com que o inimigo seja enterrado (ficar com o gráfico na metade) e sim, que quando o player pula no inimigo ele irá cair do mapa. (mas se você quiser fazer com que, ao invés do inimigo cair do mapa, ele fique com o gráfico pela metade, pode fazer, isso fica a seu critério)
Vamos começar. Como eu disse, vamos precisar de um 'evento fantasma' para criar esse sistema, para isso, crie um evento no mapa, e deixe-o sem gráfico, em processo paralelo.
Iremos usar quatro vars (outra vez) as duas primeiras serão as coordenadas X e Y do herói (isso você já fez, é só copiar e colar ambas as vars do evento do ataque, nesse evento) E as outra vars serão as coordenadas X e Y do evento da enterrada (este evento).
Para configurar as vars, você não precisaria de instruções, ela será configurada do mesmo jeito da outra, só que as vars devem ser diferentes das que você já está usando.
Bom, agora com as vars, em comandos de eventos, posicione o evento de enterrada junto ao herói, chamando o comando de evento: posição de evento, coloque a opção 'este evento' e especificar por variável. Coloque as vars X e Y do herói e dê Ok.
Agora, coloque o comando chamar script e ponha isto:
$game_map.events[@event_id].gravity = 0
novamente, para que o evento não caia do mapa. Okay, agora chame o 'mover evento' e ponha 'este evento' coloque mover abaixo três vezes, e por fim o esperar fim do movimento.
Pronto, acabou! Seu evento deve estar assim:


Pois bem, aí está.
Este evento, se você for notar, é mais ou menos parecido com o evento de ataque, só que mais simples, certo?
Criamos agora nossos tipos de ataques, que tanto podem ser: ataque em primeira pessoa, ataque à distância e o ataque de enterrada, que se, o herói pisar sobre o inimigo, ele morre.[/box]

[box class=titlebg]Finalização:[/box]
[box class=catbg3]Espera um minutinho aí... inimigo? que inimigo?
Sim, agora falta criar os nossos inimigos, onde iremos usar o script de colisão, atravessar tudo... entre outros.
Os inimigos e demais obstáculos para o herói, serão ensinados na próxima parte de tutorial, na parte 4!
E assim chegamos ao fim dessa parte do tutorial, para seguir em frente vá para a parte quatro.
Quero te ver por lá. =)

Qualquer dúvida sobre essa parte do tutorial, entrar em contato.[/box]