Avatar do usuário
All-x
Administrador
Administrador
Autor
Mensagens: 559
Registrado em: Dom Abr 24, 2016 11:50 pm
Localização: Itaporã-MS
Karma: 3302

Contato:

[GEN-TPD]#IAJ Aula 01 - Movimentação Top Down

Sex Abr 29, 2016 3:25 pm

INTRODUÇÃO A JOGOS


Aula 01 - Movimentação Top Down


(Atualizado 08/02/2015)



Depois de estudar a teoria (Introdução à GML), vamos começar a fazer nosso primeiro jogo. Mas antes de começar realmente, você precisa entender sobre o posicionamentos dos elementos na tela do jogo.

Em um plano bidimensional (2D) temos dois eixos (X e Y).

X: é a posição horizontal de algum elemento.

Y: é a posição vertical de algum elemento. OBS: Na matemática que nós estudamos na escola quando um elemento esta para cima o y é positivo e quando esta para baixo é negativo. Na computação isso é invertido, em cima é negativo e embaixo é positivo.

Imagem

Posição absoluta:

A posição absoluta no Game Maker quer dizer que as posições x e y estão em relação à room.

Exemplo: vamos criar um objeto na posição X = 10 e y = 10 na room:

instance_create(10, 10, obj_player)


Posição relativa:

A posição relativa é a posição x e y em relação à outro valor.

Exemplo: Vamos criar um objeto balana posição  y: -10 em relação ao player. Para isso o código usado é:

instance_create(x, y - 10, obj_player)


O x e o y presentes no código são as posições do objeto na room, em que o código foi colocado. Ou seja se o x do objeto na room é 32 é como se fosse 32+10.

Começando a movimentar:

Antes de tudo baixe esta engine:

[GM:S] DOWNLOAD DA ENGINE

[GM8] DOWNLOAD DA ENGINE

Guarde essa engine, usaremos ela nas próximas aulas.

Depois de baixar vamos começar a mover nosso player. Vamos ao step do player. Coloque o seguinte código:

// Direita
if keyboard_check(vk_right)
{
    sprite_index = spr_direita;
    
    if place_free(x + 4, y)
    {
        x += 4;
    }
}


Saiba mais sobre a função place_free, no tutorial abaixo:

Colisões simples

Tradução:

// Direita
se tecla_estiver_sendo_pressionada(tecla_direita)
{
    sprite_atual = spr_direita
    
    se estiver_livre_de_colisão_com_sólidos(x + 4, y)
    {
        x += 4
    }
}


- A função keyboard_check, verifica se alguma tecla esta sendo pressionada constantemente.

- A variável local sprite_index, muda a sprite do objeto.

- A função place_free, verifica se tais posições x e y estão livres de colisões com objetos sólidos.

- A variável x guarda a posição horizontal do objeto em relação a room. e usamos a operação matemática de adição para move-lo para direita.

Se entendeu bem como funciona as posições x e y, não será problema fazer as outras movimentações. Então o código final do step será este:

// Direita
if keyboard_check(vk_right)
{
    sprite_index = spr_direita;
    
    if place_free(x + 4, y)
    {
        x += 4;
    }
}

// Esquerda
if keyboard_check(vk_left)
{
    sprite_index = spr_esquerda;
    
    if place_free(x - 4, y)
    {
        x -= 4;
    }
}

// Cima
if keyboard_check(vk_down)
{
    sprite_index = cima;
    
    if place_free(x, y - 4)
    {
        y -= 4;
    }
}

// Baixo
if keyboard_check(vk_down)
{
    sprite_index = baixo;
    
    if place_free(x, y + 4)
    {
        y += 4;
    }
}


Engine completa:

[GM:S] DOWNLOAD DA ENGINE

[GM8] DOWNLOAD DA ENGINE

Agora entenda algo muito importante, o valor adicionado nas posições x e y é 4, pois ele é múltiplo de 32, que é a grade da room e a largura e altura de seus objetos. Tente mudar todos esse 4 para 5, dificilmente você passará nos cantos estreitos do jogo. Mas porque? Por que as mudanças de posição são como tele transportes, e como ele esta checando sempre o que esta em colisão ele pode parar um pouco antes do previsto. Mude todos esses 4 para 32, que você entenderá melhor o que eu quiz dizer com tele transporte.

Mas aí tu me pergunta: Não poderei usar outros valores além desse múltiplos?

Pode sim. Só teríamos que mudar nosso código usando um loop repeat:

// Direita
if keyboard_check(vk_right)
{
    sprite_index = spr_direita;
       
    repeat(7)
    {
        if place_free(x + 1, y)
        {
            x += 1;
        }
    }
}


Repare que mudamos o valor de 4 para 1, logo ele teria velocidade 1. Mas o loop repeat ocorre 7 vezes, então no mesmo frame (step) o repeat faz nossa expressão ocorrer 7 vezes (Ou seja, velocidade vai ser 7). Assim temos uma checagem de colisão perfeita que checa pixel por pixel não importando o número de vezes que ocorra. Isso chama-se pixel perfect.

Mais sobre o loop repeat na aula abaixo:

#IEM Aula 06 - For, do, until e repeat

Até mais!!!

Próxima aula: Tiro Top Down

FLWS!
1
Começando com o Game Maker? Olhou para assinatura certa!

Imagem

Tutoriais e vídeo aulas de programação! Clique no Banner e confira!

Tags:
 
Avatar do usuário
dreamaster
Novato
Novato
Mensagens: 7
Registrado em: Seg Set 19, 2016 1:58 pm
Karma: 50

Re: [GEN-TPD]#IAJ Aula 01 - Movimentação Top Down

Qui Out 27, 2016 5:40 pm

Os links para baixar as engines estão fora do ar.
1
 
Avatar do usuário
chicoweb
Membro
Membro
Mensagens: 140
Registrado em: Sáb Ago 22, 2015 5:41 pm
Karma: 735

Re: [GEN-TPD]#IAJ Aula 01 - Movimentação Top Down

Qui Fev 16, 2017 10:12 am

Ressucitei esse post porque também tava precisando dessa engine.
Alguem tem ela aí por favor (Ou uma outra boa também)?
Os links do alex estão quebrados.
Meus games:
Jump James - Aventura/Estratégia/Robô
Freedom of Pala Pala - Aventura/Estratégia
Prisioneira - RPG/Bloco/Ação
 
Avatar do usuário
gabrielsch
Colaborador
Colaborador
Mensagens: 251
Registrado em: Dom Abr 10, 2016 3:34 am
Karma: 1559

Re: [GEN-TPD]#IAJ Aula 01 - Movimentação Top Down

Qui Fev 16, 2017 10:36 am

dreamaster escreveu:
Os links para baixar as engines estão fora do ar.

chicoweb escreveu:
Ressucitei esse post porque também tava precisando dessa engine.
Alguem tem ela aí por favor (Ou uma outra boa também)?
Os links do alex estão quebrados.

Provavelmente o exemplo está perdido, reservei um tempinho para fazer algo no mesmo estilo, veja se agrada os dois. https://goo.gl/PdjhfW
1
Imagem
 
Avatar do usuário
chicoweb
Membro
Membro
Mensagens: 140
Registrado em: Sáb Ago 22, 2015 5:41 pm
Karma: 735

Re: [GEN-TPD]#IAJ Aula 01 - Movimentação Top Down

Qui Fev 16, 2017 2:00 pm

gabrielsch escreveu:
dreamaster escreveu:
Os links para baixar as engines estão fora do ar.

chicoweb escreveu:
Ressucitei esse post porque também tava precisando dessa engine.
Alguem tem ela aí por favor (Ou uma outra boa também)?
Os links do alex estão quebrados.

Provavelmente o exemplo está perdido, reservei um tempinho para fazer algo no mesmo estilo, veja se agrada os dois. https://goo.gl/PdjhfW


Seu link tá dando erro 404 aqui pelo menos.
Eu também fiz uma para GMS baseado no tutorial do Alex, so tive que fazer algumas correções.
Download engine movimento top down

Correções:

sprite_index substituido por image_index
O bloco que simula parede tem que ser solido.
Meus games:
Jump James - Aventura/Estratégia/Robô
Freedom of Pala Pala - Aventura/Estratégia
Prisioneira - RPG/Bloco/Ação