Você está na página 1de 4

Pausando seu jogo com menu

Nvel: Avanado (aborda um sistema complexo)


Aplicvel a GM6 e GM7
--Antes de mais nada, bom explicar que h vrias formas de se pausar um jogo. H tcnicas
desde exibir uma caixa de mensagem na tela (show_message), at formas que usam sleep e
outras funes. A tcnica que abordarei uma das mais complexas que existem, porm ela
PRA de fato apenas os objetos que voc quer e coloca dubls em seus lugares. Assim, ser
at possvel se fazer um menu no pause com opes, sons e efeitos, mas j deixo claro que
no abordarei como se faz tal menu, o foco da matria explicar o esquema para parar e
disparar os objetos pausveis.
Voc pode aplicar essa tcnica em qualquer jogo que voc esteja fazendo, no sendo
necessrias grandes mudanas em sua engine.
Seria interessante se mais usurios fizessem tutos e mini-tutos abordando outras formas de
pause.

Materiais necessrios:
1 jogo que voc esteja desenvolvendo (der XD)
1 script chamado "pausavel"
1 objeto chamado "pauseador"
1 objeto chamado "duble" (dubl)

Os nomes so apenas exemplos, voc pode dar o nome que quiser


Como o esquema funciona
Uma vriavel global (global.pause) controlar se o jogo est pausado ou no (true=pausado,
false=no pausado).
Quando a varivel for true, os objetos pausveis* sero desativados** e substitudos por
dubls, que contm o mesmo sprite e caractersticas de imagem, porm o dubl apenas
um objeto fixo, parado. So os dubls que do o ar de que tudo parou.

*Objetos pausveis so geralmente objetos que se mexem ou tm interao no jogo. O


personagem que o jogador controla, os inimigos, objetos de enfeite de cenrio e at o objeto
que exibe a GUI so exemplos de objetos pausveis.
Objetos como o cho, paredes e itens no animados e que no se mexem so exemplos de
objetos no pausveis. (eles at podem ser pausados, mas observe que no h necessidade.
Se voc parar apenas os objetos que se mexem, o pause ficar mais leve)

**Objetos desativados no so objetos que deixaram de existir (instance_destroy), porm


tambm no so objetos que de fato existem. Todas suas informaes ainda esto na
memria, porm nenhuma funo como instance_exists capaz de enxerg-lo. Um objeto
desativado no desenhado na tela nem executa NADA, ou seja, seus eventos no so
executados.
Objetos desativados so provenientes das funes instance_deactivate_all,
instance_deactivate_object e instance_deactivate_region (leia o manual do GM para maiores
informaes)
Apenas as funes instance_activate_all, instance_activate_object e
instance_activate_region so capazes de enxergar os objetos desativados (para ativ-los de
novo)

Mos obra
No scrpit "pausavel", adicione as seguintes linhas:

CODE
if global.pause=true
{
var var_duble;
var_duble=instance_create(x,y,duble);
var_duble.sprite_index=sprite_index;
var_duble.image_angle=image_angle;
var_duble.image_index=image_index;
var_duble.image_xscale=image_xscale;
var_duble.image_yscale=image_yscale;
var_duble.image_blend=image_blend;
var_duble.image_alpha=image_alpha;
var_duble.depth=depth;
var_duble.image_speed=0;
var_duble.id_original=id;
instance_deactivate_object(id);
}

O objeto que executa esse script criar um dubl em seu local e se desativar. Observe que
o objeto passa todas suas caractersticas de imagem ao dubl (sprite, tamanho, alpha, etc),
com exceo ao image_speed, que o dubl recebe o valor 0, j que ele fica parado. O dubl
tambm recebe o depth do objeto original.
Tambm criada no dubl a varivel id_original; essa varivel armazena o ID do objeto que
o dubl est representando, onde o dubl o usar para reativar tal objeto quando o jogador
despausar.
Na ltima linha, o objeto se auto-desativa; a partir da, mais NADA nele executado at que
ele seja ativado novamente.

---

Agora crie o objeto de nome "duble"


O dubl deve ser um objeto padro, marcado como visvel e sem sprite.
Coloque essas linhas no evendo STEP dele:

CODE
if global.pause=false
{
instance_activate_object(id_original);
instance_destroy()
}

Essas linhas fazem com que o duble reative o objeto que ele est representando e se autodestrua, tudo isso quando o jogo for despausado (global.pause=false)

---

Agora crie o objeto "pauseador"


O objeto pauseador aquele que chavear a global.pause, fazendo-a ser true ou
false. muito importante que voc entenda isso.
O objeto pauseador tambm o objeto que pode desenhar o menu do pause na tela. Porm
como eu disse anteriormente, no estarei explicando no tutorial como se faz tal menu, j
que alm de no ser o foco da matria, acho melhor deixar em branco para que cada um
faa seu prprio menu personalisado do jeito que et acostumado a fazer.
Outra coisa importante que o objeto pauseador deve declarar a varivel global.pause no
seu evento CREATE, setando-a para false.

No final da matria, haver um link para o download de uma engine, l haver um menu de

exemplo, caso esteja interessado. Na engine, o boto Enter pausa o jogo


(global.pause=true) e ativa o menu; e no menu h a opo de despausar o jogo
(global.pause=false).
Mas repetindo, o importante voc saber que o objeto pauseador aquele que da true ou
false na variavel global.pause

---

Agora, basta voc os seguintes passos em TODOS os objetos pauseveis do seu jogo:

Reduo da imagem: 82% do seu tamanho original [ 624 x 472 ]

1 - No evento STEP do objeto pausavel, coloque um EXECUTE A SCRIPT


2 - Selecione o script "pausavel"
3 - Clique em OK
Ateno: no importa se seu objeto j tenha coisas no step, adicione o script normalmente.
Pronto, todos os objetos que tiverem esse script no step sero pausados.

Você também pode gostar