Entrar
Últimos assuntos
» player não consegue andarpor lovn7 Qui 21 Nov 2024, 13:33
» É possível fazer istó no game maker
por William Lima Qui 21 Nov 2024, 10:56
» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por Lua Sáb 16 Nov 2024, 20:22
» (Resolvido) Cenario longo x Texture Pages
por josuedemoraes Sáb 16 Nov 2024, 15:31
» Kids' band
por Adilson Lucindo Santos Sex 15 Nov 2024, 12:23
» (RESOLVIDO) Engasgos-Troca de Sprites/animações
por josuedemoraes Ter 12 Nov 2024, 01:49
» Block Room - DEMO
por Joton Qua 06 Nov 2024, 22:58
» Game Infinito vertical (subindo)
por macmilam Sáb 26 Out 2024, 12:36
» Retorno da GMBR!!!
por Dancity Ter 22 Out 2024, 16:36
» Máquina de estados
por aminaro Qui 10 Out 2024, 13:33
» como faço pra um objeto colidir com o outro e diminuir a vida do player ?
por josuedemoraes Qui 03 Out 2024, 16:51
» RESOLVIDO: Colisão com objetos moveis
por josuedemoraes Qua 02 Out 2024, 20:28
» Crypt of the Blood Moon
por divin sphere Qua 11 Set 2024, 18:18
» como fazer um objeto seguir?
por divin sphere Dom 18 Ago 2024, 18:08
» Procuro de alguém para Modelar/Texturizar/Animar objetos 3D
por un00brn Dom 11 Ago 2024, 11:10
» Destruição de cenário (estilo DD Tank)
por CoronelZeg Sex 09 Ago 2024, 17:16
» RESOLVIDO-Como destruir uma instancia especifica de um objeto
por josuedemoraes Ter 23 Jul 2024, 00:40
» Automatizar a coleta de id
por GabrielXavier Seg 22 Jul 2024, 18:01
» Preciso de ajuda para concluir um pequeno projeto
por lmoura Qui 27 Jun 2024, 15:45
» ANGULO ACOMPANHAR O OBJETO
por Klinton Rodrigues Qui 27 Jun 2024, 08:34
» Musica reinicia quando sala reinicia
por GabrielXavier Ter 18 Jun 2024, 07:28
» como fazer uma copia de gd
por generico_cube Sex 14 Jun 2024, 15:48
» Square Adventure
por guilherme551 Ter 11 Jun 2024, 09:54
» como posso definir limite de uma variavel
por GabrielXavier Sex 07 Jun 2024, 14:14
» [Resolvido] Dúvida, colisão única de objeto
por vdm842 Sex 24 maio 2024, 09:50
Tiro difuso com mira no mouse
3 participantes
GMBR :: Ensine & Aprenda :: Tutoriais :: Game Maker
Página 1 de 1
Tiro difuso com mira no mouse
Nome: Tiro difuso com mira no mouse
Descrição: Técnica simples pra criar um disparo "não linear"
Nível de dificuldade: Iniciante a intermediário
Requerimentos: Versão Pro
Partindo do princípio, "difuso" quer dizer um tiro que não concentra seus projéteis em uma única direção exata, o que é comum em shooters side-scrolling ou top-down. Pessoalmente acho o efeito difuso mais agradável, menos "quadrado". Vejam a screen abaixo que mostra o resultado:
Eu usei sprites de um jogo de nave, mas a lógica serve pra qualquer jogo de tiro com mira no mouse. A primeira coisa a fazer é configurar nossas sprites, no caso a nave e o tiro:
Tem dois detalhes importantes aqui. Um é o eixo das imagens que deve ser definido como "center", já que irão girar livremente conforme a mira, e outro é a orientação inicial das imagens para a direita.
Isso tem um motivo simples, pra quem não sabe o plano angular no pc parte da direita e segue em sentido anti-horário, como mostra a figura:
Com isso pronto vamos a parte que interessa, programar. Criem um objeto para a nave e outro para o tiro, então entrem na edição do objeto nave e façam o seguinte:
point_direction(x1, y1, x2, y2) calcula o ângulo formado pelo segmento indicado
Nesse evento estamos dizendo que o objeto terá sua "face" apontada para o mouse constantemente (step).
lenghtdir_x ou y(len, dir) calcula o vetor x ou y com base na direção e distância definida
alarm[0] ativa um contador regressivo com o tempo indicado (em steps)
Nesse evento criamos as instâncias dos projéteis num ponto específico da nave, que nesse caso é no centro a sua frente. Como nosso objeto gira não dá pra simplesmente dizer o ponto x,y da frente da nave, então usamos o lenghtdir que calcula automaticamente o vetor como se fosse um "compasso" (aqueles de desenho).
Pra fechar o alarm irá controlar o delay entre os disparos como vocês vão ver adiante.
Um detalhe importante, foi usado "global" mouse e não apenas mouse, isso é porque o global mouse permite que o evento seja ativado quando clicamos em qualquer lugar da tela, diferente do mouse simples onde só funciona se clicarmos dentro da região do objeto, como num botão por exemplo.
Aqui basta verificar se o mouse ainda está clicado, se sim repete o código de criação do projétil. Desse jeito temos um limite de tiros por segundo/step configurável, basta aumentar ou reduzir o valor de alarm[0] no evento do mouse.
Passando agora para o objeto tiro:
choose(x1, x2, x3 ...) sorteia um valor dentre os indicados, com no máximo 16 opções
O que fizemos aqui foi alinhar a direção da imagem do tiro com a da nave e então gerar um movimento nesta mesma direção, porém com um fator de inclinação que é definido pelo choose. Os valores de -3 a 3 somados ao image_angle da nave geram um "cone" que pode ser ajustado variando os valores em choose.
É óbvio que o tiro do jogador terá interação com os inimigos, através do evento de colisão e etc que vocês farão conforme seus projetos, mas outra ação indispensável é destruí-lo caso saia dos limites da tela pra evitar sobrecarga da execução.
Já temos a programação do nosso tiro, basta colocar a nave na room e por pra executar. Uma dica é habilitar o "interpolate colors..." no global game settings, pois essa opção suaviza os gráficos deixando o giro das sprites mais agradável. Dá pra ver que ele desfoca um pouco a imagem, mas em jogos com gráficos mais "redondos" fica muito bom, já pra pixel art tipo retrô eu não recomendo.
Aproveitem o tutorial, perguntas ou qualquer outra coisa basta postar aqui mesmo!
Descrição: Técnica simples pra criar um disparo "não linear"
Nível de dificuldade: Iniciante a intermediário
Requerimentos: Versão Pro
Partindo do princípio, "difuso" quer dizer um tiro que não concentra seus projéteis em uma única direção exata, o que é comum em shooters side-scrolling ou top-down. Pessoalmente acho o efeito difuso mais agradável, menos "quadrado". Vejam a screen abaixo que mostra o resultado:
Eu usei sprites de um jogo de nave, mas a lógica serve pra qualquer jogo de tiro com mira no mouse. A primeira coisa a fazer é configurar nossas sprites, no caso a nave e o tiro:
Tem dois detalhes importantes aqui. Um é o eixo das imagens que deve ser definido como "center", já que irão girar livremente conforme a mira, e outro é a orientação inicial das imagens para a direita.
Isso tem um motivo simples, pra quem não sabe o plano angular no pc parte da direita e segue em sentido anti-horário, como mostra a figura:
Com isso pronto vamos a parte que interessa, programar. Criem um objeto para a nave e outro para o tiro, então entrem na edição do objeto nave e façam o seguinte:
- Código:
Evento Step
image_angle = point_direction(x, y, mouse_x, mouse_y);
point_direction(x1, y1, x2, y2) calcula o ângulo formado pelo segmento indicado
Nesse evento estamos dizendo que o objeto terá sua "face" apontada para o mouse constantemente (step).
- Código:
Evento Mouse > Global Left Button
instance_create(x + lengthdir_x(16, image_angle), y + lengthdir_y(16, image_angle), objTiro);
alarm[0] = 210;
lenghtdir_x ou y(len, dir) calcula o vetor x ou y com base na direção e distância definida
alarm[0] ativa um contador regressivo com o tempo indicado (em steps)
Nesse evento criamos as instâncias dos projéteis num ponto específico da nave, que nesse caso é no centro a sua frente. Como nosso objeto gira não dá pra simplesmente dizer o ponto x,y da frente da nave, então usamos o lenghtdir que calcula automaticamente o vetor como se fosse um "compasso" (aqueles de desenho).
Pra fechar o alarm irá controlar o delay entre os disparos como vocês vão ver adiante.
Um detalhe importante, foi usado "global" mouse e não apenas mouse, isso é porque o global mouse permite que o evento seja ativado quando clicamos em qualquer lugar da tela, diferente do mouse simples onde só funciona se clicarmos dentro da região do objeto, como num botão por exemplo.
- Código:
Evento Alarm[0]
if mouse_check_button(mb_left)
{ instance_create(x + lengthdir_x(32, image_angle), y + lengthdir_y(32, image_angle), objTiro); alarm[0] = 30; }
Aqui basta verificar se o mouse ainda está clicado, se sim repete o código de criação do projétil. Desse jeito temos um limite de tiros por segundo/step configurável, basta aumentar ou reduzir o valor de alarm[0] no evento do mouse.
Passando agora para o objeto tiro:
- Código:
Evento Create
image_angle = objNave.image_angle;
motion_set(objNave.image_angle + choose(-3, -2.5, -2, -1.5, -1, 0, 1, 1.5, 2, 2.5, 3), 20);
choose(x1, x2, x3 ...) sorteia um valor dentre os indicados, com no máximo 16 opções
O que fizemos aqui foi alinhar a direção da imagem do tiro com a da nave e então gerar um movimento nesta mesma direção, porém com um fator de inclinação que é definido pelo choose. Os valores de -3 a 3 somados ao image_angle da nave geram um "cone" que pode ser ajustado variando os valores em choose.
- Código:
Evento Other > Outside Room
instance_destroy();
É óbvio que o tiro do jogador terá interação com os inimigos, através do evento de colisão e etc que vocês farão conforme seus projetos, mas outra ação indispensável é destruí-lo caso saia dos limites da tela pra evitar sobrecarga da execução.
Já temos a programação do nosso tiro, basta colocar a nave na room e por pra executar. Uma dica é habilitar o "interpolate colors..." no global game settings, pois essa opção suaviza os gráficos deixando o giro das sprites mais agradável. Dá pra ver que ele desfoca um pouco a imagem, mas em jogos com gráficos mais "redondos" fica muito bom, já pra pixel art tipo retrô eu não recomendo.
Aproveitem o tutorial, perguntas ou qualquer outra coisa basta postar aqui mesmo!
Última edição por †Ceifador em Sáb 11 Set 2010, 13:35, editado 1 vez(es)
†Ceifador- Data de inscrição : 28/08/2010
Reputação : 0
Número de Mensagens : 154
Prêmios :
x 0 x 1 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Tiro difuso com mira no mouse
Muito bom seu tutorial
Apesar de eu já saber
mas ajuda muitos iniciantes
Apesar de eu já saber
mas ajuda muitos iniciantes
Mentos e Coca-cola- Games Ranking :
Notas recebidas : D
Data de inscrição : 30/06/2010
Reputação : 21
Número de Mensagens : 642
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Tiro difuso com mira no mouse
Nossa, dessa eu não sabia, muito bom o Tutorial.
gabrielsch- Games Ranking :
Notas recebidas : D + A + A
Data de inscrição : 06/12/2009
Reputação : 28
Número de Mensagens : 1230
Prêmios :
x 0 x 0 x 0
x 1 x 2 x 0
x 1 x 0 x 0
Tópicos semelhantes
» Tem como a mira mexer sem ter que clicar no mouse? ( só mexendo o mouse )
» Mira com o mouse
» mira com o mouse
» [RESOLVIDO] Mira que segue o mouse
» [Resolvido] A mira seguir o mouse
» Mira com o mouse
» mira com o mouse
» [RESOLVIDO] Mira que segue o mouse
» [Resolvido] A mira seguir o mouse
GMBR :: Ensine & Aprenda :: Tutoriais :: Game Maker
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos