GMBR
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Entrar

Esqueci-me da senha

Últimos assuntos
» Como ajustar velocidade de cada frame da animação no game maker
por pequetux Hoje à(s) 16:45

» Preciso de ajuda
por AftonDuGrau Dom 21 Abr 2024, 20:18

» Como faz o evento drawn GUI, não se repetir?
por aminaro Sex 19 Abr 2024, 20:30

» PROBLEMAS COM FÍSICAS DE ÁGUA
por aminaro Ter 16 Abr 2024, 10:07

» Retorno da GMBR!!!
por Ralphed Sex 12 Abr 2024, 22:45

» JOGADOR PARANDO NO AR QUANDO ATACA
por aminaro Qua 10 Abr 2024, 13:51

» Problemas com texto interativo
por Kaaru72 Dom 07 Abr 2024, 11:31

» Erro escondido e indecifrável
por dev_gabize.azv Qui 04 Abr 2024, 10:11

» Mudar cor de apenas uma palavra
por Ralphed Sáb 30 Mar 2024, 00:39

» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27

» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30

» Aceito pedidos de sprites (Com exemplos meus)
por Sevilha Qua 28 Fev 2024, 12:17

» Inventário simples
por Isquilo_Roedor Qui 22 Fev 2024, 15:18

» Problemas na programaçnao de inimigo [jogo DOOM LIKE]
por Black Mirror Dom 11 Fev 2024, 13:34

» ANDROID MULTI TOUCH
por DiegoBr Dom 04 Fev 2024, 12:13

» Servidor de Discord do fórum?
por Lighter Sáb 27 Jan 2024, 17:18

» Save e Load Json
por Klinton Rodrigues Qui 25 Jan 2024, 11:12

» Colisão com mais de um objeto
por aminaro Seg 22 Jan 2024, 15:02

» Oi sou novo aqui
por Thiago Silveira Alexandre Sáb 20 Jan 2024, 20:55

» Como acessar conteudo comprado no marketplace
por macmilam Sex 19 Jan 2024, 07:42

» Devlogs em vídeos do Block Room
por Joton Seg 15 Jan 2024, 16:56

» Alguém aqui já ganha dinheiro com seus games?
por Joton Seg 15 Jan 2024, 16:49

» ACERVO GMBR MAGAZINE
por Joton Qui 11 Jan 2024, 19:21

» como aumentar o obj sem aumentar a colisão??
por GabrielXavier Qua 10 Jan 2024, 07:21

» Asteroid Core - Early Acesse Update [0.2.0.0]
por JOZ. Seg 08 Jan 2024, 14:39


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

2 participantes

Ir para baixo

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

Mensagem por dharrison 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:
[Tutorial] Salto Ilusório & Colisão Falsa. Balls
(Use o Recurso ADD-FROM-STRIP, Tamanho 32x32, 2 Imagens, c/ Transparencia)

A Bolinha Verde Saltando:
[Tutorial] Salto Ilusório & Colisão Falsa. Jumpingball
(Use o Recurso ADD-FROM-STRIP, Tamanho 160x32, 8 Imagens, c/ Transparencia)

A MASK da Bolinha:
[Tutorial] Salto Ilusório & Colisão Falsa. Maskn
(Apenas Crie um Sprite normal, COM Transparência, 32x32)

A Caixa Roxa:
[Tutorial] Salto Ilusório & Colisão Falsa. Slido
(Apenas Crie um Sprite normal, SEM Transparência, 32x32)

E A Parede Verde:
[Tutorial] Salto Ilusório & Colisão Falsa. Vwall
(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):

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

(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
dharrison

Games Ranking : Nota B

Notas recebidas : A - B
Data de inscrição : 04/02/2009
Reputação : 120
Número de Mensagens : 1363
Prêmios : [Tutorial] Salto Ilusório & Colisão Falsa. Empty

Medalhas x 0 Tutoriais x 9 Moedas x 0

Ouro x 0 Prata x 1 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Plataformas :
  • Game Maker 8.0 ou 8.1
  • Game Maker Studio 2.0
  • C#


Ir para o topo Ir para baixo

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

Mensagem por Gabreel 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
Gabreel

Data de inscrição : 02/10/2009
Reputação : 52
Número de Mensagens : 2232
Prêmios : [Tutorial] Salto Ilusório & Colisão Falsa. Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Plataformas :
  • Game Maker 8.0 ou 8.1
  • Game Maker Studio 1.4
  • Game Maker Studio 2.0
  • Javascript
  • Outros


Ir para o topo Ir para baixo

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

Mensagem por dharrison 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
dharrison

Games Ranking : Nota B

Notas recebidas : A - B
Data de inscrição : 04/02/2009
Reputação : 120
Número de Mensagens : 1363
Prêmios : [Tutorial] Salto Ilusório & Colisão Falsa. Empty

Medalhas x 0 Tutoriais x 9 Moedas x 0

Ouro x 0 Prata x 1 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Plataformas :
  • Game Maker 8.0 ou 8.1
  • Game Maker Studio 2.0
  • C#


Ir para o topo Ir para baixo

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

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo


 
Permissões neste sub-fórum
Não podes responder a tópicos