[Tutorial] Salto Ilusório & Colisão Falsa.

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

[Tutorial] Salto Ilusório & Colisão Falsa.

Mensagem por dharrison em Qua 17 Nov 2010, 00:05

Boa noite galera! Esse eh meu primeiro Tuto aqui no fórum, espero que gostem.
Antes de mais nada vamos explicar o que ele faz:

Tudo começou quando eu quis fazer um Char saltar sobre um obstaculo, mas sem usar Gravidade, e sem que o Objeto em sí fizesse tal movimento...
Bem, eu consegui cheers
O Resultado foi esse:

Salto Ilusório.rar

Use as Setas do Teclado para ir para a direita e esquerda, quando a Bolinha ficar Verde tecle S para ela pular, ela pula para direita e para a esquerda sobre as Caixas Roxas.
Até aí normal... (ou não)
Você poderá notar que mesmo que mantenha as Setas pressionadas (ou nem as precione), a bolinha fará o Salto igual sempre.
Isso é porque ela na verdade não saltou.

Chega de Blá-blá-blá, vamos ao Tuto ;)


SALTO ILUSÓRIO & COLISÃO FALSA

Dificuldade: Fácil se feito corretamente.
Ferramenta Usada: GM7 Pro (Embora talvez seja possivel fazer até mesmo no GM6)


MATERIAL:

O primeiro passo é criar os Sprites que usaremos, você pode fazê-los você mesmo pelo Editor de Imagem do GM.
Mas aqui estão os que eu usei, e as instruções de como importá-las:

As Bolinhas:

(Use o Recurso ADD-FROM-STRIP, Tamanho 32x32, 2 Imagens, c/ Transparencia)

A Bolinha Verde Saltando:

(Use o Recurso ADD-FROM-STRIP, Tamanho 160x32, 8 Imagens, c/ Transparencia)

A MASK da Bolinha:

(Apenas Crie um Sprite normal, COM Transparência, 32x32)

A Caixa Roxa:

(Apenas Crie um Sprite normal, SEM Transparência, 32x32)

E A Parede Verde:

(Apenas Crie um Sprite normal, SEM Transparência, 160x32)

--- Se você não souber fazer isso, aconselho que antes de mais nada siga os Tutoriais do Reddragon e do Alex FC


COMEÇANDO A FESTA:

Nomeie seus Sprites como quiser, eu coloquei assim:
s_ball_b (Bola Branca)
s_ball_vd (Bola Verde)
s_mask (Mask da Bola)
s_sólido (Caixa Roxa >coloquei o assento tbm<)
v_wall (Parede Verde)
ball_jump_d (Bola Verde pulando para a Direita)
ball_jump_e (Bola Verde pulando para a Esquerda >é só duplicar a ball_jump_d e usar o Efeito Mirror no editor que ela fica virada pra esquerda<)

Depois disso centralize o eixo do sprite no meio da Bola, em todos eles (ali onde tem X e Y, e vc clica no botão CENTER, ao invéz de usar CENTER clique com o mouse no meio da bola).


Então crie um OBJ chamado Hero (ou qualquer nome que você queira, desde que não copie meus códigos exatamente como estão não vai causar problemas).
Marque as Caixas VISIBLE, SOLID e PERSISTENT, e na opção MASK selecione o sprite s_mask.

No Evento CREATE dele adicione:

Código:
//Variáveis de uso Comum
parado = true
direita = true

//Variáveis Relacionadas ao Teste
mover = true
saltar = false
pulando = false

//Sprites
sprite_index = s_ball_b

e no Evento STEP adiocione um Piece of Code, e nele coloque:

Código:
//COMANDOS

//Andar Direita
if keyboard_check(vk_right) and mover = true
{
x += 4
parado = false
direita = true
}
else
{
parado = true
}

//Andar Esquerda
if keyboard_check(vk_left) and mover = true
{
x -= 4
parado = false
direita = false
}
else
{
parado = true
}

Isso fará nossa Bolinha andar igual uma barata tonta pra esquerda e pra direita... bounce

Agora logo abaixo coloque o seguinte código, ele é importante pois é ele que fará nossa Bolinha saltar futuramente:

Código:
//Tecla para Pular quando Estiver na "Área de Salto"(Parede Verde)
if Hero.saltar = true
{
    if keyboard_check_pressed(ord('S'))
    {
    pulando = true
    }
}

Não precisa se preocupar com o que estiver depois das barras "//", isso não altera o código.
OBS: a variável PARADO não será usada, se quiser nem precisa colocar.
OBS2: não se esqueça: se você mudou os nomes dos Objetos/Sprites/Variáveis, Ñ COPIE DE QUALQUER JEITO O CÓDIGO.

Agora Vamos á Teoria:
Você deve ter percebido que usei um monte de variáveis sem pé nem cabeça certo? Suspect
Errado!
Todas variáveis descritas servem para controlar o que faremos daqui a pouco, mas antes vamos entender a coisa toda:

mover - esta variavel vai determinar se o Hero vai ou não poder se mover, é por causa dela que a bolinha não andava enquando fazia o 'falso pulo' no Executável que postei lá em cima.

saltar - esta variavel serve para determinar quando a bolinha pode ou não Saltar. É por causa dela que a Bolinha ficava verde ao se aproximar das caixas roxas (indicando que ela poderia Saltar agora).

pulando - esta variavel é responsavel por mudar o Sprite da bolinha (para fazê-la saltar), também por tornar o MOVER false temporariamente, e 'teletransportar' o OBJ Hero do lugar. Ela faz toda a mágica.

direita - esta variavel é de uso muito comum em jogos de plataforma, ela serve para determinar se o Hero está virado para a direita (true) ou para a esquerda (false). Se você aprendeu o básico de GML com o João Neto (da Finada BR MAKER, e tbm da MUNDO RPG MAKER... E creio que por aqui também ele deve estar) você deve estar familiarizado com ela. O Alex FC usa técnicas semelhantes, pelo que notei nas suas aulas.

Prontooo! felicidade


Agora que entendemos o que são essas variáveis malucas, vamos ao segundo Piece of Code do Evento Step do Hero.
Puxe outro Piece of Code abaixo daquele que você estava editando agora, não é obrigatório fazer isso, mas deixa a coisa toda mais organizada.

Nele coloque:

Código:
////MUDANÇA DE SPRITES\\\\
///Normal:
//(vazio) - No momento não é necessária nenhuma função especial para voltar ao Sprite Normal
//Visto que só há uma Ação.

///SALTAR
//A formula a seguir, faz o Hero mudar o sprite, mas ficar imóvel na verdade.
if Hero.pulando = true
{
Hero.mover = false //Faz com que o Objeto Hero não se mova até o fim da animação ilusória.
Hero.image_speed = 1 //Altera a image_speed para 1, nesse caso não há problemas, mas você terá que adaptar isso se usar sprites animados para seus jogos (ao invés de uma bolinha estática)
    if Hero.direita = true //Se Hero estiver indo para a direita...
    {
    Hero.sprite_index = ball_jump_d //Muda sprite para a Bola pulando para a Direita (óbvio...)
        if image_index >= 7 // "Se image_index for igual ou maior que 7" - isso serve para determinar quando a animação acaba, se tivessem 5 imagens do Sprite, seria ">= 5"
        {
        Hero.pulando = false //A Ação Pulando acaba...
        sprite_index = s_ball_b //Sprite volta a ser a bolinha branca
        Hero.x += 130 //O Obj Hero é movido 130pxl para a direita, 'teletransportando-se'. É isso que faz a bolinha mudar de lugar de verdade.
        }
    }
    else //a partir do Else, é a mesma coisa, só que invertida pro lado Esquerdo ("ELSE" > "SE NÃO" for True, que é Direita, é False, que é Esquerda... óvíbio)
    {
    Hero.sprite_index = ball_jump_e
        if image_index >= 7
        {
        Hero.pulando = false
        sprite_index = s_ball_b
        Hero.x -= 130
        }
    }
}
else
{
Hero.mover = true //depois de toda animação acabar, e PULANDO voltar a ser FALSE, Hero pode se MOVER novamente.
}

Toda Explicação está no proprio código, qualquer dúvida perguntem depois...
Continuemos:

Crie dois novos Objetos:
um chamado mureta_1, com o Sprite v_wall. Desmarque as caixas SOLID e VISIBLE, e coloque como MASK o v_wall.
e outro chamado sólido, deixe marcado as caixas SOLID e VISIBLE, e volte ao Hero.
OBS: O Sprites de ambos Objs acima devem estar CENTRALIZADOS. Happy

Agora crie um Terceiro Piece of Code para nossa Bolinha, e coloque no Step Event, abaixo dos anteriores.
Aqui são os toque finais:

Código:
//FALSAS COLISÕES

//Falsa Colisão para "Ligar" a Função Saltar
if distance_to_object(mureta_1) < 1 //Se a Distância do Objeto mureta_1 (Parede Verde) for menor que 1... Usando isso dessa maneira específica simula uma colisão, quando na verdade não há...
{
Hero.saltar = true //O Hero pode saltar quando chega nela, ela ativa a "Área de Salto", imagine um aeroporto: a mureta_1 é a pista, ela que vai possibilitar que nosso avião (Bolinha/Hero) pouse.
    if pulando = false //Se pulando for FALSE >> IMPORTANTE: se vc errar aqui o Sprite não vai mudar quando você pular, porque aqui declaramos que a Bolinha só fica com o Sprite Verde, SE NÃO ESTIVER PULANDO.
    {
    sprite_index = s_ball_vd //Bolinha fica Verde.
    }
}
else
{
Hero.saltar = false //Hero não pode saltar se não estiver na "Área de Salto"
sprite_index = s_ball_b //Seu Sprite volta a ser Branco.
}

Ainda no OBJ Hero, Adicione um evento de Colisão com o OBJ sólido (Caixa Roxa), e na Aba Control, arraste o botão CHECK COLISION para a área em branco, e apenas dê OK, sem alterar nada.

PRONTOOO.... perae.. QUASE!! Razz


Por ultimo, mas não menos importante, crie uma room e coloque os objetos nela dessa maneira (se puder fazer exatamente assim, melhor):



(Para deixar a OBJ mureta_1/Parede Verde atrás das OBJ sólido/Caixa Roxa, é só colocar ela, segurar CRTL e Clicar com o Botão Direito do Mouse nela, e escolha a Opção "SEND TO BACK", embora isso em especial não mude nada...)


Agora é só testar e ver se funcionou!!



Espero que tenham gostado, e que seja util para criar cinematics a partir de Sprites, para fazer uma porta ser aberta com mais realismo, entre outras utilidades que você pode encontrar para seus jogos de plataforma.

Basicamente todo esse metodo é um jeito de fazer o GM executar uma ação no lugar do Jogador em sí..
Então usem a imaginação Very Happy
Qualquer dúvida só gritar, ajudo no que for possível.


Abraços, DHarrison. lol!

dharrison

Ranking : Nota B
Número de Mensagens : 1243
Idade : 25
Data de inscrição : 04/02/2009
Notas recebidas : A - B
Reputação : 89
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 0
   : 1
   : 0

Voltar ao Topo Ir em baixo

Re: [Tutorial] Salto Ilusório & Colisão Falsa.

Mensagem por Gabreel em Qua 17 Nov 2010, 00:54

Muito bem explicado... Parabéns...

Mais seilá isso nmão é meio ineficiente?

Pois pense comigo...
,)
-|-
./\._______
.................._____________

Se o heroi ir para frente sempre ele vai continuar flutuando, não?

Gabreel

Número de Mensagens : 2227
Idade : 20
Data de inscrição : 02/10/2009
Reputação : 52
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [Tutorial] Salto Ilusório & Colisão Falsa.

Mensagem por dharrison em Qua 17 Nov 2010, 17:41

eu tava pensando nas utiladades para isso tudo, e vo desenvolver uns exemplos de como usar. Ai posto aqui.

Aí dou mais detalhes Very Happy



SUPER EDIT:

Pra num ficar flodando o tpc ou vo dar um EDIT aqui.

o Biel acima questinou se o Hero ficaria flutuando, eu fiz os teste com Gravidade aqui, e estes são os resultados:

Salto Falso + Gravidade.rar


Como pode ver a Gravidade funciona perfeitamente mesmo com o Salto Falso, não foi nada dificil fazer essa alteração, só coloquei gravidade como em um jogo normal, com apenas alguns detalhes a mais...



Continuação do Tutorial: Colocando Gravidade compatível com o Salto Falso

Para colocar gravidade no Hero, primeiro Delete a Colisão com o OBJ sólido(Caixa Roxa).
Depois vá no primeiro Piece of Code do Step Event e faça as seguintes modificações:

Código:
///GRAVIDADE\\\
if place_free(x,y+1) and pulando = false //Se não tiver esse "and pulando = false" o Hero não será capaz de se mover
{
gravity=.5;
}
else
{
gravity=0;
}
//Velocidade Maxima pra Cair
if vspeed > 10
{
vspeed=10;
}


///COMANDOS\\\

//Andar Direita
if keyboard_check(vk_right) and mover = true
{
    if place_free(x+4,y) //A unica coisa que mudou é que colocamos um if place_free nos movimentos do Hero, pra ele não ficar dando bug com as paredes
    {
    x += 4
    parado = false
    direita = true
    }
    else
    {
    parado = true
    }
}


//Andar Esquerda
if keyboard_check(vk_left) and mover = true
{
    if place_free(x-4,y)
    {
    x -= 4
    parado = false
    direita = false
    }
    else
    {
    parado = true
    }
}

Para finalizar va ao OBJ sólido/Caixa Roxa, adicione um evento Colision com Hero, arraste um Piece of Code para dentro dele e inclua o seguinte código:

Código:
move_contact_solid(direction,10);
vspeed=0;

Prontinhu Happy
Agora temos Gravidade e o Pulo Falso juntos.

PS. Eu sei que o Hero não sobe devolta para a primeira plataforma, mas por enquanto realmente não tenho a intenção de fazê-lo mover-se para cima, isso farei mais para frente santa

-------------------------------------

Bom, agora vou continuar fazendo uns testes aqui, porque ainda hoje quero mostrar como esse método pode ser útil num jogo de plataforma comum.

Nós vamos abrir uma porta! ( não vai ser tão idiota quanto parece cheers )


Quando tiver novidades volto a postar, abraços!
Atenciosamente, DHarrison.

dharrison

Ranking : Nota B
Número de Mensagens : 1243
Idade : 25
Data de inscrição : 04/02/2009
Notas recebidas : A - B
Reputação : 89
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 0
   : 1
   : 0

Voltar ao Topo Ir em baixo

Re: [Tutorial] Salto Ilusório & Colisão Falsa.

Mensagem por Conteúdo patrocinado Hoje à(s) 16:14


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum