Os interruptores são úteis. Imagina uma chaleira elétrica sem um, que triste, não é?
Acrescentar interruptores aos teus jogos abre um monte de possibilidades: talvez abram portas, ativem um dispositivo ou façam surgir um bicho. Seja o que for que queiras que o jogador faça, este código simples de interruptor ajuda-te a começar.
Primeiro vamos desenhar um sprite de interruptor. Se andas com pouca memória disponível, talvez baste uma única frame (podemos usar SPRITEINK para colorir consoante esteja ligado ou desligado)... ou então podes ter uma frame ON e outra OFF. Neste exemplo vou usar duas frames e cor.
Este é o meu sprite de interruptor de 24 Hour Parsley People: Episode 1:


Depois de desenhares o interruptor, vamos precisar de escrever um pouco de código que controle o jogador a ligá-lo e desligá-lo ao colidir com ele. Quando tentei isto pela primeira vez, fiz uma grande confusão: como a troca é acionada quando o jogador colide com o interruptor, ele alternava entre ON e OFF durante a colisão. A solução foi usar um parâmetro do sprite (usei SETTINGA) para guardar se havia uma colisão ativa ou não e, se houvesse, só mudar do estado atual para o contrário (ON/OFF). Simples!
Aqui está o código em ação: quando o jogador toca no interruptor, liga (ON) o dispositivo elétrico da direita... e, se já estava ligado (ON), desliga-o (OFF) (hoje não vamos preocupar-nos com
o código do dispositivo elétrico... apenas com o facto de o podermos ligar (ON) ou desligar (OFF))
Este é o código do SWITCH:
IF IMAGE 12 ; am I a switch?
IF E = 0 ; is the electricity OFF?
SPRITEINK 2 ; be red when OFF
LET FRAME = 1 ; display the OFF frame
ELSE ; otherwise I must be ON
SPRITEINK 4 ; be green when ON
LET FRAME = 0 ; display the ON frame
ENDIF
IF COLLISION 0 ; is the player touching the switch?
IF SETTINGA = 0 ; were they NOT already touching it ?
IF E = 1 ; if electricity is ON
LET E = 0 ; switch it off
ELSE ; otherwise its OFF
LET E = 1 ; so we'll switch it ON
ENDIF
BEEP 20 ; make a sound
LET SETTINGA = 1 ; remember the player is touching the switch
ENDIF
ELSE ; if the player isn't colliding with the switch
LET SETTINGA = 0 ; remember we are not touching it
ENDIF
ENDIFPor fim, para garantir que o interruptor aparece de forma suave e correta quando o jogador entra num ecrã que tem um, vamos acrescentar algumas regras ao evento SPRITE INITIALISATION:
IF TYPE 8 ; or wherever your switch code is
IF IMAGE 12 ; SWITCH
IF E = 0 ; if electricity is off
LET FRAME = 1 ; display the OFF frame
SPRITEINK 2 ; and make it RED
ELSE ; otherwise electricity is ON
LET FRAME = 0 ; so display the ON frame
SPRITEINK 4 ; make it green
ENDIF
LET SETTINGA = 0 ; to start with there is no active collision
ENDIF
ENDIFPronto: interruptores rápidos e fáceis, com uma variável que podemos usar noutras partes para o que acontece quando há energia. (IF E = 1 ... faz coisas realmente malvadas!)
Espero que isto ajude!
