terça-feira, 20 de outubro de 2015

C.A.P. (Cursos Abertos Profissionalizantes): Game Maker 8.0 - Ações de Controle (Parte 1)



Há uma série de ações com o qual você pode controlar quais outras ações são realizadas. A maioria destas ações uma pergunta, por exemplo, se uma posição está vazio.

Quando a resposta é sim (true) a próxima ação é executada, caso contrário ele é ignorado. Se você quiser várias ações a serem executadas ou ignoradas com base no resultado você pode colocá-los em um bloco, colocando blocos de ação de início e fim em torno delas.

Também pode haver uma outra parte que é executada quando a resposta é não. Então, uma pergunta tipicamente aparece como segue:


Aqui a questão é perguntar se uma posição para a instância atual está livre de colisão. Em caso afirmativo, a instância começa a se mover em uma determinada direção.

Se não, a instância vai para uma determinada posição. Observe que os blocos são recuados.

Isto dá uma melhor visão global das ações. (Em especial quando você usa blocos dentro de blocos.) Também é mais fácil detectar quando você se esqueceu de um bloco de início ou final de ação de bloco.

Para todas as perguntas há um campo denominado NÃO. Se você verificar neste campo, o resultado da questão é invertida.

Ou seja, se o resultado era verdade se torna falsa e se era falsa, torna-se verdade. Isso permite que você execute certas ações quando uma pergunta não é verdade.

Para muitas perguntas você pode indicar que elas devem ser aplicadas a todas as instâncias de um objeto específico. Neste caso, o resultado só é verdade se é verdade para todas as instâncias do objeto.

Por exemplo, você pode verificar se todas as bolas
para a posição ligeiramente a direita estão livre de colisão. As seguintes questões e ações relacionadas estão disponíveis. (Observe que todos eles têm um ícone diferente em forma e uma cor de fundo diferente para que eles possam mais facilmente ser distinguidos de outras ações.)

Check Empty
(Se uma posição está livre de colisão)
if place_free(x,y)

Esta pergunta retorna o valor true se a instância atual, colocada na posição indicada, não ocasiona uma colisão com outro objeto. É possível especificar a posição tanto absoluta como relativa.

Também pode-se indicar se apenas objetos sólidos devam ser levados em conta, ou todos os objetos. Esta ação é tipicamente usada para verificar se uma determinada instância pode se mover para uma posição em particular.

Check Collision
(Se há uma colisão em uma posição)
if place_empty(x,y)

Esta pergunta tem ação reversa à pergunta anterior. Retorna true se há uma colisão quando a instância atual é colocada em uma determinada posição (novamente, pode ser relativa tanto a objetos sólidos, como a todos os objetos).
Check Object
(Se há objeto em uma posição)
if place_meeting(x,y,obj)

Esta pergunta retorna true se a instância colocada na posição indicada encontra uma instância de um objeto indicado.

Test Instance
(Se o número de instâncias é um certo valor)

Pode-se especificar um objeto e um número. Se o número de instâncias atual de um objeto é igual ao número especificado, a pergunta retorna true; caso contrário, retorna false.

Também pode-se especificar se esta verificação pelo número de instâncias deveria ser menor ao determinado valor ou maior do que o dado valor. É tipicamente usado para verificar todas as instâncias de um tipo de objeto em particular, freqüentemente no momento de terminar um nível ou mesmo um jogo.

Test Chance
(Sorteado um número, realize uma ação)
random_set_seed(seed)

É possível especificar o número de lados de um dado. Então se o dado sorteia um determinado valor, o resultado é true e uma determinada ação é realizada. Isto pode ser utilizado para colocar um elemento aleatório ao jogo. Por exemplo, em cada passo pode se gerar em posição aleatória uma bomba ou modificar sua direção.

Quanto maior for o número de lados do dado, menor são as chances. Atualmente, é possível inclusive utilizar números reais para a especificação do número de lados.

Usar números menores que 1, entretanto, não faz sentido.

Check Question
(Se o usuário responde sim a uma pergunta)

Especifica-se uma pergunta. Uma caixa de diálogo é mostrada ao jogador, com um botão yes e um botão no. O resultado é true se o jogador responde yes.

Test Expression
(Se uma expressão é verdadeira)

Esta é a pergunta mais geral. Pode-se especificar uma expressão qualquer. Se a expressão for avaliada true (isto é, um número maior ou igual a 0.5) a ação é realizada.

Posteriormente, será descrito mais sobre expressões.

Check Mouse
(Se um botão do mouse está pressionado)
mouse_check_button(numb)

Retorna true se o botão indicado do mouse está pressionado. Um uso padrão é no evento de passo (step event).

Pode-se verificar se o botão do mouse está pressionado, e caso afirmativo, por exemplo mover o objeto para certa posição; use a ação jump to a point com valores mouse_x e mouse_y.

Check Grid
(Se instância está alinhada com a grade)
place_snapped(hsnap,vsnap)

Retorna true se a posição de uma instância encontra-se em uma grade (grid). Especifica se o espaçamento horizontal e vertical da grade. É muito útil em certas ações que são apenas permitidas quando a instância ocupa uma determinada posição na grade.
Start block (Início de um bloco)

Indica o início de um bloco de ações.

End block (Início de um bloco)

Indica o fim de um bloco de ações.

Até a próxima aula!

Nenhum comentário:

Postar um comentário