Movimento Personalizado - Parte 1: Introdução

Introdução:

Depois de algum tempo, você nota que o movimento padrão do Multimedia Fusion 2 tem uns errinhos, limitações, e essas coisas não é? Aí você desiste de usar Multimedia Fusion 2 porque ele é uma droga, é bugadão, e... não, espera, não é por aí! A questão é que depois de ter criado um ou dois jogos, está na hora de evoluir seu movimento. Nessa matéria, vou ensinar os fundamentos básicos para se fazer um Movimento Personalizado. As vantagens dele? Inúmeras. Por exemplo, segundo o Staltz, você pode colocar uma gravidade maior do que a máxima do Movimento Pré-definido. Além disso, o Movimento Personalizado não é bugadão como o Pré-definido.

Legal, e aí você me pergunta: "Tiago, é difícil"? Não. É pura lógica. O meu problema é que eu tentava fazer Movimento Personalizado quando eu tinha 9 anos, e não sabia raciocinar. Por isso criei esse "medo" do Movimento Personalizado. E é muito legal fazer! A única coisa que eu odeio são os maldito detectores. Mas com o tempo, você acostuma. Essa matéria vai te dar os fundamentos básicos do Movimento Personalizado. Futuramente, talvez, eu crie outras aprofundando o assunto. Alguns termos dessa matéria podem estar iguais a matéria do Staltz, porque a li um dia desses, e algumas coisas não consigo tirar da minha cabeça. Bom, chega de papo, vamos a matéria.

A Matéria

O movimento será criado através de eventos; nós iremos criá-lo, logo, não é necessário nenhum outro tipo de movimento. Por isso, o normal é você colocar o movimento Static no seu personagem. Colocou? Ótimo. Bem, vamos supor que você quer fazer o seu personagem ir para a esquerda...

Every 00"-05
Set X Position to X("Personagem")+2

Ou seja, a cada 5 centisegundos, a posição X do personagem seria a sua própria posição mais dois. Agora teste, e veja que o personagem sai andando para a direita. Wow, muito legal, mas não é isso que queremos. Nós precisamos controlar o movimento. E é agora que a coisa complica ou não. O negócio é que os valores de um movimento variam constantemente; por isso temos que utilizar variáveis. Variável é um valor que varia. Uma variável no Multimedia Fusion 2 é conhecida como Alterable Value (Valor Alterável). Outras "variáveis" são os Counters (Contadores). Eu prefiro os Counters, porque com eles eu posso definidir o valor máximo de uma maneira bem mais simples, e além disso, eu tenho uma noção do que está acontecendo.

Então, agora vamos evoluir os nossos eventos. Eu vou usar Counters porque como já falei, acho eles bem melhores. Então, crie dois Counters, e coloque os nomes deles de CounterX e CounterY. O CounterX vai definir a posição horizontal do personagem, e o CounterY a posição vertical. Ponha o valor máximo do CounterX e do CounterY como 2 e o valor mínimo como -2. Coloque também um Active Object chamado Personagem na tela. Uma vez que colocamos o Personagem e os Counters na tela, vamos fazer o nosso movimento.

Antes de mais nada, temos que fazer com que a Posição X e a Posição Y do personagem também sejam variáveis. O problema é que elas não são. Por isso precisamos dos Counters: para transformá-las em valores variáveis. O que vamos fazer é fazer com que a Posição X do personagem seja sempre a sua própria posição X somada ao valor do nosso CounterX. E a Posição Y sempre seja a sua própria posição Y somada ao valor do CounterY. Então, fazemos esse evento:

Always
(Personagem) Set X Position to X("Personagem")+Value("CounterX")
(Personagem) Set Y Position to Y("Personagem")+Value("CounterY")

Agora teste. Ele ainda não anda, porque ainda não manipulamos os valores dos Counters. Então, dá na mesma (por enquanto). Mas esse é o primeiro passo pra se fazer um Movimento Personalizado.

Ok, legal. Mas ele fica parado, e assim não dá pra jogar. E agora? Agora vamos controlar os valores dos Counters. Porque controlar o valor dos Counters significa controlar a posição do personagem. Para fazer o movimento, nós utilizamos o Plano Cartesiano. É, aquele mesmo que você aprendeu na escola.


É, esse treco realmente está invertido no Y. É que segundo o tio Skilo, o Plano Computacional é assim mesmo.

Ok, agora vamos fazer o movimento. Vamos fazer com que, enquanto estiver pressionando a tecla para a direita, adicione 1 ao valor do CounterX. Adicionar 1 é andar um pixel para a direita. Subtrair 1 é andar 1 pixel para a esquerda.

Repeat while "Player 1" Moved right
Add 1 to CounterX

Agora, para a esquerda. É a mesma coisa.

Repeat while "Player 1" Moved left
Subtract 1 to CounterX

A propósito, como os nerds de matemática notaram, subtrair 1 e adicionar -1 é a mesma coisa. Ah bem, agora vamos fazer os movimentos horizontais. Primeiro, mover pra cima:

Repeat while "Player 1" Moved top
Subtract 1 to CounterY

Agora, mover para baixo:

Repeat while "Player 1" Moved down
Add 1 to CounterY

Yeaah!! Legal! Bem, na verdade, como pode notar, estamos usando o Plano Computacional, e não o Cartesiano. Mas isso importa ué? Ah é, rode o jogo e veja... agora ele se meche!!11!!11!! O estranho é que ele não para de andar! E sabe por quê? Porque ainda não fizemos a desaceleração. Mas relaxa que é fácil... quando não estiver pressionando a tecla para a direita nem para a esquerda, vamos mudar o valor do CounterX para 0.

X Repeat while "Player 1" Moved right
X Repeat while "Player 1" Moved left
Set CounterX to 0

Agora, quando não estiver pressionando a tecla para cima nem para baixo, vamos mudar o valor do CounterY para 0.

X Repeat while "Player 1" Moved top
X Repeat while "Player 1" Moved down
Set CounterY to 0

Pronto, teste. Viu? Agora ele para de andar! Huhuh! Bem interessante não é? Certooo! Agora vamos aplicar isso a um jogo de plataforma! Antes de continuarmos, apague os eventos relacionados ao CounterY (aceleração e desaceleração) porque em jogos de plataforma é meio diferente. Ah é, e no CounterY mude o valor máximo para 10 e o valor mínimo para -15. O valor máximo é a velocidade máxima de queda e o valor mínimo é a altura máxima do pulo.

Antes do pulo, vem a gravidade. O primeiro evento serve para que a cada dois centisegundos, se o Personagem não estiver sobrepondo um obstáculo, adicionar 1 ao CounterY. E o segundo faz com que quando o personagem colide com um obstáculo, o CounterY mude para 0.

Every 00"-02
X Personagem is overlapping a backdrop
Add 1 to CounterY

Personagem collides with backdrop
Set CounterY to 0

Pronto, gravidade criada. Agora, o pulo. É bem simples: se o personagem estiver sobrepondo um obstáculo, e o jogador pressionar a tecla de fogo 1, vamos mudar o CounterY para -15.

Personagem is overlapping a backdrop
Pressed fire 1
Set CounterY to 0

Pronto! Criamos um Movimento Personalizado simples!

Finalizando

Mas ei, ei! Não vai querer criar um jogo agora! O que acabamos de fazer, é na verdade bem mais bugado que o pré-definido. Essa matéria serviu só pra te ensinar os fundamentos do Movimento Personalizado. Ainda falta Detectores de Colisão, Fast Loops, etc. Mas isso fica pra próxima matéria. Na próxima matéria, vou ensinar a fazer o verdadeiro Movimento Personalizado.

Ah é, é, antes que eu me esqueça, quero agradecer ao Staltz, ao Skilo, ao Matheus e ao Silas. Porque sem eles, essa matéria não estaria aqui... E ao Perdido, por ser meu "redator" hihi. E claro, ao HiperBite pela figura do Plano Computacional.

Se você não entendeu alguma parte da matéria, aqui vão os exemplos. O MovCustom1 é até antes da parte que começamos a adaptar o movimento para plataforma. O MovCustom2 é ele adaptado para plataforma.

MovCustom1: MediaFire
MovCustom2: MediaFire