Todo evento e até o jogador principal são um Game_Character. Essa magnífica classe cuida de toda a movimentação dos personagens do jogo, e nada vale mais pena do que analisá-la delicadamente, método por método. Iremos, obviamente, analisar somente os métodos mais importantes.
Temos aí que todas as características de um personagem são inicializadas e guardadas em variáveis. São as mais importante para o assunto:
@x e @y Guardam as coordenadas de tile do personagem.
@real_x e @real_y Guardam as coordenadas reais do personagem.
@tile_id Caso seja um evento que tenha um tile como gráfico, essa variável guarda a id do tile.
@character_name e @character_hue Guarda o nome do gráfico do personagem, assim como seu HUE(que determina a sua cor).
@direction e @original_direction Guardam a direção que o personagem olha, e sua direção original(2 = baixo, 4 = esquerda, 6 = direita, 8 = cima)
@pattern e @original_pattern Guardam a posição de movimento do personagem atual e a posição posição de movimento do personagem original(aquelas posições do gráfico, uma de quando tá parado, outra andando com o pé esquerdo, etc)
@move_type, @move_speed e @move_frequency Guardam o tipo de movimento atual do personagem, sua velocidade e a frequencia do movimento.
O método testa se o real_x é igual ao x(lembre-se, em um movimento o real_x do personagem não se iguala ao real_x da nova posição, ele vai aumentando progressivamente) ou se o real_y é igual ao y, se não for, logicamente o personagem está se movendo.
moveto(x,y)
def moveto(x, y)@x= x % $game_map.width @y= y % $game_map.height @real_x=@x*128@real_y=@y*128@prelock_direction=0end
TELEPORTA o personagem(sem animações) para uma posição. Observe que, para evitar que animações ocorram, o real_x e o real_y imediatamente assumem seus valores corretos.
screen_x, screen_y
def screen_x return(@real_x- $game_map.display_x +3)/4+16enddef screen_y y =(@real_y- $game_map.display_y +3)/4+32if@jump_count>=@jump_peak n =@jump_count-@jump_peakelse n =@jump_peak-@jump_countendreturn y -(@jump_peak*@jump_peak- n * n)/2end
Esses métodos retornam a posição gráfica(na tela) do personagem. São métodos com cálculos intrigantes, e prefiro não explicá-los, pois essa aula é apenas uma aula intermediária..
É aqui que ocorre a mágica do movimento. Primeiro, o método cálcula a distância que será adicionada ao real_x e/ou ao real_y, que é justamente 2 elevado a potência da velocidade do personagem. Observe que, quanto maior a velocidade do personagem, mais absurdamente distância ele andará a cada frame, sendo assim seu movimento será executado mais rápido(porém não mais vezes!). A linha [@real_y + distance, @y * 128].min e suas variantes asseguram que o real_x e o real_y vão ser adicionados pela distância calculada, porém não ultrapassarão o x e o y de tile reais.
1.3 - Conclusão
Então pessoal, é isso! A aula está bem simples, porém planejo ir atualizando ela conforme eu tiver tempo e for aprendendo mais, pois há mais coisas atrás da movimentação de personagens! Ainda não falei sobre pulos e sobre a mudança de pattern, isso será coisa que adicionarei depois. Espero que tenham gostado!