Conectar-se
Quem está conectado
35 usuários online :: 1 usuário cadastrado, Nenhum Invisível e 34 Visitantes

CRP-Max

Ver toda a lista


Compartilhe
Ver o tópico anteriorIr em baixoVer o tópico seguinte
avatar
Data de inscrição : 24/06/2011
Número de Mensagens : 9
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 0
Ver perfil do usuário

Movimento em Grid

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:
4shared.com/file/5_O4mqF5/movimentao_em_grid.html

Espero que tenham gostado do tutorial. Qualquer dúvida, estamos aí.
avatar
Data de inscrição : 06/06/2010
Número de Mensagens : 222
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 3
Ver perfil do usuário

Re: Movimento em Grid

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
Ver o tópico anteriorVoltar ao TopoVer o tópico seguinte
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum