Se estás a desenhar um jogo 2D de vista lateral, como um jogo de plataformas, é provável que o teu jogador precise de saltar (JUMP). Algo que se adiciona facilmente associando um comando JUMP a uma tecla específica.
Neste momento, no nosso jogo temos algumas linhas de código no Player Event que tratam do salto:
IF KEY FIRE JUMP 7 ENDIF
O “7” é a força do JUMP; podemos mudá-lo para outro valor se quisermos um salto mais alto ou mais baixo.
Tudo bastante simples.
Mas o que talvez não saibas é que o MPAGD também tem duas variáveis adicionais do jogador com as quais podemos trabalhar para alterar o funcionamento do salto, ou o que o jogador pode ou não fazer no ar. São:
AIRBORNE: tem o valor 0 quando o jogador está no chão e aumenta quanto mais tempo estiver no ar
JUMPSPEED: guarda um valor que controla a velocidade de subida/descida. No código podemos saber se o jogador está a subir ou a descer.
Vamos testar. Primeiro vamos criar um ecrã de teste simples. No teu editor de ecrãs, cria um ecrã com um conjunto de wallblocks por todo o contorno. Depois certifica-te de que adicionas o teu sprite de jogador com o Sprite Positions Editor.
Adiciona o teu ecrã ao Map e prime enter para o tornar o ecrã inicial.
A seguir, abre o código do teu Player Event e adiciona o seguinte código acima do comando FALL:
IF KEY OPTION2
ADD 1 TO J
WHILE KEY OPTION2
ENDWHILE
IF J > 20
LET J = 0
ENDIF
ENDIF
AT 2 3
PRINT "JUMP:"
AT 2 13
DISPLAY TRIPLEDIGITS J
AT 3 3
PRINT "JUMPSPEED:"
AT 3 13
DISPLAY TRIPLEDIGITS JUMPSPEED
AT 4 3
PRINT "AIRBORNE:"
AT 4 13
DISPLAY TRIPLEDIGITS AIRBORNE
IF AIRBORNE <> 0
IF JUMPSPEED < 50
ADD 0 TO JUMPSPEED
ELSE
IF JUMPSPEED > 240
ADD 0 TO JUMPSPEED
ENDIF
ENDIF
ENDIFAgora executa o teu jogo.
Quando começar, prime a tecla “2”. Deves ver o valor JUMP: aumentar no ecrã; define o salto como 10
Agora prime a tua tecla de salto (espaço!)
Um grande salto!
Continua a saltar e repara em como os números de cada variável mudam.
Enquanto o salto do jogador sobe, JUMPSPEED aumenta a partir de 256 - FORÇA DO SALTO, por isso, se usares JUMP 10, JUMPSPEED começa em 256 - 10 = 246
Lembra-te de que é um número de 8 bits, por isso, quando chega a 255 e é incrementado outra vez, volta a 0. No contexto do nosso JUMP, quando JUMPSPEED chega a 0 o jogador atinge o ponto mais alto do salto e começa a descer. Ao descer, JUMPSPEED vai incrementar de 0 até ao valor de JUMP; quando chegar (no nosso exemplo) a 10, o jogador terá aterrado.
AIRBORNE, por outro lado, simplesmente aumenta enquanto o jogador está no ar, começando em 0 e incrementando. Quando AIRBORNE é 0 o jogador está no chão; para qualquer outro valor sabemos que está no ar. Podemos tirar partido disto com uma instrução como IF AIRBORNE <> 0 (ou seja, se o jogador não está no chão, faz algo); lembra-te de que <> significa “NÃO É”
Para mexer no JUMP, o código que te dei acima está preparado para testares o que acontece se alterarmos a velocidade a que JUMPSPEED muda:
IF AIRBORNE <> 0 ; player is in the air
IF JUMPSPEED < 50 ; is player descending?
ADD 0 TO JUMPSPEED ; if so change the rate of fall
ELSE
IF JUMPSPEED > 240 ; is player ascending
ADD 0 TO JUMPSPEED ; change the rate of ascent
ENDIF
ENDIF
ENDIF
Ao mudares o 0 nas partes realçadas do código, vais alterar a velocidade de subida/descida
Experimenta; isto é o que acontece quando mudamos a velocidade de descida assim:
ADD 5 TO JUMPSPEED
Neste caso a subida é normal, mas a descida é muito mais rápida.
Repara que a rotina JUMP padrão do MPAGD é um salto ao estilo “Mario”: o jogador pode mover-se e mudar de direção no ar, não é um salto fixo do tipo “Manic Miner”.
Lembra-te: se o teu jogo envolve saltos (JUMP), garante que tens uma linha FALL no código do evento do teu jogador, ou podem nunca mais descer!
