Movimento em Grid

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

Movimento em Grid

Mensagem por Chaos Theory em Sab 16 Jul 2011, 00:44

Movimentação em Grid

Versão: GM 8.
Dificuldade: Iniciante.
Assunto: Movimentação respeitando uma grid.
Aplicação: Muitos estilos de jogos necessitam de uma movimentação mais precisa tanto para tornar a jogabilidade melhor quanto para poder tornar certos sistemas possíveis.

Gráficos:

Decidi usar os gráficos do char básico do GM 8:





Para deixar o projeto um pouco mais apresentável, usei como background o gráfico:


Scripts

move
Primeiro vamos carregar em variáveis aquilo que é necessário para o funcionamento do script:
Código:
g_dir = c_dir;
g_esq = c_esq;
g_cima = c_cima;
g_baixo = c_baixo;
   
m_dir = keyboard_check(vk_right);
m_esq = keyboard_check(vk_left);
m_cima = keyboard_check(vk_up);
m_baixo = keyboard_check(vk_down);
   
vlc = 4;
   
pos = place_snapped(32,32);
Nessa parte do script definimos: gráficos do char (1º grupo), teclas de movimento (2º grupo), velocidade de movimento e parâmetros de largura e altura da grid. Todas as funções aderem a variável um valor de 0 ou 1 para poderão ser analisadas nas condicionais de forma mais resumida, exemplificando o código.

Agora fazemos uso das variáveis anteriormente definidas nas duas estruturas condicionais "if" principais:
Código:
if(pos and !(m_dir or m_cima or m_esq or m_baixo)){
        vspeed = 0;
        hspeed = 0;
        image_speed = 0;
        image_index = 0; } else { image_speed = vlc/10; }
   
    if(pos){
        if(m_dir  ){ motion_set(000,vlc); sprite_index = g_dir  ; }
        if(m_cima ){ motion_set(090,vlc); sprite_index = g_cima ; }
        if(m_esq  ){ motion_set(180,vlc); sprite_index = g_esq  ; }
        if(m_baixo){ motion_set(270,vlc); sprite_index = g_baixo; }}
O objetivo da grid é definir um movimento padrão para o character cobrindo determinado espaço em determinado tempo. Nesse caso, na primeira estrutura conferimos se objeto do char está enquadrado (pos) juntamente com a inutilização de todas as teclas de movimento (m_dir or m_cima or m_esq or m_baixo). O sinal "!" equivale a um not. Se tudo confere na primeira condicional, o objeto é parado (vspeed e hspeed) e o gráfico do char passa a ser o 0, que de forma padrão é o gráfico do char parado.

A segunda condicional gera o movimento conforme a tecla pressionada conferindo o enquadramento, o que impede o aumento excessivo de velocidade de movimento ou quebra do enquadramento. Nas subcondiconais é executado o movimento por motion_set que torna o trabalho mais simples juntamente com a troca de gráfico do char que recebe vida com o else da primeira condicional principal.

Objetos

obj_char
Defina o gráfico dele como quiser e em seu evento step execute o script move.


Rooms

room0
Posicione o objeto obj_char de forma que ele fique enquadrado em 32x32 pixels, caso contrário o script não surgirá efeito.


Execute!

Agora o seu personagem se move de forma padrão numa grade 32x32 pixels. Futuramente criarei outros tutoriais que usarão esse tipo de movimento em pro de outras funções para mostrar melhor sua funcionalidade.


Engine

Para aqueles que quiserem, segue o link para download da engine desse tutorial:
http://www.4shared.com/file/5_O4mqF5/movimentao_em_grid.html

Espero que tenham gostado do tutorial. Qualquer dúvida, estamos aí.

Chaos Theory

Número de Mensagens : 9
Idade : 21
Data de inscrição : 24/06/2011
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Movimento em Grid

Mensagem por Ufrarion em Qua 03 Ago 2011, 04:57

Ficou perfeito esse tuto! muito bem explicado e formatado continue assim!

Obs: Tu podia botar pelo menos uma indicação de tutorial de como dividir a imagem o char, ja que o tuto e direcionado aos iniciante

Ufrarion

Número de Mensagens : 222
Data de inscrição : 06/06/2010
Reputação : 3
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

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