Sensor de eventos




► Introdução
Esse sistema consiste em fazer com que quando o personagem passe pelo raio de visão de determinado evento, algo ocorra.
O raio de visão poderá ser definido por você, bem como suas direções (esquerda, direita, cima e baixo)

► Considerações:

Eu estou utilizando os gráficos do clássico: Bonanza e Bros para criar este tutorial, mas você poderá utilizar os gráficos que desejar, obviamente.
É de suma importância que você tenha um conhecimento básico sobre as variáveis para acompanhar o tutorial. Se desejar, dê uma lida nestas aulas.

Determinando as coordenadas:
Vamos iniciar o tutorial determinando primeiramente onde o evento que irá te visualizar, ficará no mapa.
Crie um novo evento no seu mapa, e determine as coordenadas para o mesmo, como mostrado na imagem abaixo:



Eu determinei que o meu evento ficará nas coordenadas (x,y) 13 e 14 no mapa, porém você poderá coloca-lo onde preferir, mas é necessário termos os dados dessas coordenadas, para posteriormente utilizarmos em nossas condições.
Agora deixe o evento em processo paralelo, e dentro dos comandos de eventos crie quatro variáveis: Duas dessas variáveis devem armazenar as coordenadas X do evento e do personagem no mapa, e as outras duas as coordenadas Y de ambos. Por fim teremos algo assim:



Eu farei com que quando o evento olhar para a esquerda e o personagem estiver em seu raio de visão, determinadas ações ocorram, então com essa informação farei com que quando o evento 'estiver olhando para a esquerda' as condições posteriores entrem em ação.
Você poderá fazer com que o seu evento possa visualizar o personagem à qualquer direção, como já dito, mas eu irei fazer apenas com a direção esquerda.
Continuando: Irei guardar numa variável a posição do evento. Para isto crie uma quinta variável, e nela armazene a direção do evento no mapa:
► Opções de variável ► Evento ► Este evento ► Direção.

Agora nós temos cinco variáveis: Duas delas armazenam as coordenadas X do evento e personagem no mapa, outras duas armazenam as coordenadas Y, e a quinta armazena a direção que o evento se encontra no mapa.

Determinando o raio de visão:
Agora que as variáveis estão a armazenar as informações necessárias, crie uma condição utilizando a variável que armazena a direção do evento, e coloque sua constante em dois (pois 2 == direção virado para baixo nas variáveis - [Onde o personagem se encontra] ler aula 4 sobre variáveis)
Dentro dessa condição, iguale à variável da coordenada Y do evento à variável da coordenada Y do personagem, numa segunda condição.
No final, teremos algo assim:



Como estamos determinando o raio de visão do evento, apenas para a direção da esquerda, nós igualamos as coordenadas Y (na horizontal) de ambos, porém se você for fazer algo com as direções cima ou baixo, iguale as coordenadas X de ambos, ao invés das coordenadas Y.

Lembram-se de que guardamos a informação das coordenadas deste evento no mapa? Então, agora a partir dessa informação nós iremos determinar o raio de visão do evento.
Como o meu evento se encontra nas coordenadas (13,14) no mapa, eu irei definir um raio de visão para ele, de até 5 tiles de distância, ou seja, se o personagem estiver 5 tiles antes da coordenada 13 no mapa, o evento irá visualizar o personagem e ativar determinados comandos.
Esses 5 tiles antes da coordenada X= 13 seriam respectivamente as coordenadas X: (8, 9, 10, 11 e 12)
Só que para não termos de criar 5 condições diferentes contendo cada coordenada, iremos simplesmente criar uma condição com a variável da coordenada X do herói, e deixar sua constante em 13 e setar a opção ''menor'' dentro da condição:



Isso significa que se o personagem estiver numa coordenada X menor que 13 no mapa, algo ocorrerá.
Claro que precisaremos impor um limite também, pois o RPG Maker irá interpretar que o personagem estando em qualquer direção X no mapa menor que 13 ele irá ativar seus comandos, e é o que nós não queremos. Queremos que apenas o evento nos 'visualize' se o personagem estiver cinco tiles na frente do evento.
Para criarmos este limite, basta colocar uma outra condição dentro dessa condição da coordenada X com a seguinte informação:
A condição da coordenada X com a constante igual à 8 e com a opção "maior ou igual'' setada, no final tudo ficará assim:



Isso significa que o evento só irá nos ver, 5 tiles antes de sua frente (utilizando o comando da condição variável >> coordenada X do personagem menor que 13) e nada mais que isto (utilizando o comando da condição de variável da coordenada X do personagem maior ou igual à 8 --- os 5 tiles)

Agora, dentro dessa última condição basta definir o que irá ocorrer quando o personagem estiver no raio de visão do evento.

Para o evento olhar para os lados (no meu caso) deixe sua rota como pré-definida, e defina um movimento do evento em ciclos, onde o mesmo ora olha para a esquerda, ora olha para a direita:



Finalização:
E é isto, agora você poderá fazer com que algo ocorra em determinados eventos, se o personagem passar pelo raio de visão deles.
Qualquer dúvida com relação a este tutorial, pode me procurar.



Outro método:
► Introdução
No tutorial anterior foi ensinado como criar um sensor para os eventos que estão estáticos no mapa, onde suas coordenadas já são constantes.
Mas e no caso de termos que lidar com coordenadas variáveis? Ou seja, um sensor para eventos que estão em constante movimento, como fazer?
Vamos ver isso agora!

► As variáveis
Vamos criar o evento no mapa que se move, e enquanto isso ele pode detectar a presença do personagem em determinadas distâncias, algo que foi feito no tutorial passado.

Crie o evento em processo paralelo no mapa e deixe sua rota em aleatória com velocidade lenta.
Armazene as coordenadas X e Y do personagem e do evento em quatro variáveis diferentes:



Agora preste atenção nesse detalhe:
O evento no meu mapa está em 2 na coordenada X:



O personagem por sua vez, que está à direita desse evento possui 3 como coordenada X.
Se estivesse à esquerda do evento, sua coordenada X seria 1.
Concorda que se eu subtrair a coordenada X do evento com a coordenada X do personagem (o personagem estando à direita do evento) eu teria o resultado -1?
2 – 3 = -1
E se eu criar uma condição que possa ser satisfeita se essa subtração fosse igual a -1? Ou seja, quando o personagem sempre estiver à direita do evento.
Estando à direita do evento, essa variável sempre vai retornar ao valor -1 por conta da subtração, e então criar uma condição que seja satisfeita quando a coordenada X do evento for igual a -1 acaba nos dando a possibilidade de criar um sensor que detecta a distância do personagem com relação ao evento, mesmo o evento estando em movimento.
Para detectar o personagem à esquerda do evento, basta criar uma condição que se ative quando a variável da coordenada X do evento for igual a 1, pois:

Coordenada X do evento: 2
Coordenada X do personagem: 1

2 – 1 = 1

Vamos passar esse raciocínio para o RPG Maker?

► Determinando a distância
Após armazenar as coordenadas do evento e do personagem em variáveis, subtraia o valor da coordenada X do evento, pelo valor da coordenada X do personagem:



Devemos verificar se o personagem e o evento estão na mesma direção em relação ao eixo Y, para que o evento apenas possa “enxergar” o personagem quando ele estiver em nossa frente, e não em qualquer local do mapa.
Crie a condição para que quando o evento e o personagem estiverem nas mesmas coordenadas Y, as próximas condições possam ser ativadas:



Dentro dessa condição vamos estipular a distância do sensor e a sua direção.
Se o evento estiver virado para a direita, os valores serão negativos. O evento virado para a esquerda terá valores positivos, como foi explicado mais acima.
Crie duas condições que determinem a direção do evento:



Dentro da primeira condição vamos estipular a distância que o evento irá detectar o personagem quando o evento estiver virado para a esquerda.
Se fosse apenas um tile de distância o valor seria 1, porém seria muito perto, que tal colocarmos 6 tiles de distância?
Ou seja, se o valor da coordenada X do evento após a subtração for entre 1 e 6, ele poderá detectar o personagem.
Então crie a condição dessa forma:



Dentro dessa condição você pode colocar o que acontecerá quando o evento “ver” o personagem. No meu caso, eu apenas coloquei um balão de expressão.

Na condição da direção da direita, faça o mesmo procedimento, porém agora com valores negativos entre -6 e -1.
Seu evento ficará por fim, dessa forma:



Rode o teste do projeto e fique à frente do evento (nas coordenada X, ou seja, pelos lados)
Perceba que quando o personagem está entre 1 à 6 tiles de distância, o evento executa a animação, e se você ficar numa distância maior que 6, a animação não ocorre.


Sensor detectando personagem.


Sensor não detecta o personagem, pois este está numa distância além da detecção estipulada. 

Isso porque você definiu que o raio de visão do evento seria de 6 tiles de distância, se ultrapassar esse valor o evento não alcançará o personagem com o sensor.
Se quiser que a distância do sensor seja menor, basta alterar o valor de 6 para um número menor, como 4 por exemplo, e se quiser aumentar essa distância, basta aumentar o valor da constante, também.

► Variável auxiliar
Agora você deve estar ser perguntando como que faria para o evento detectar o personagem nas coordenadas Y, também.
Eu até diria que seria da mesma forma só apenas trocando os comandos que checam as coordenadas X pelas coordenadas Y, mas não é bem assim.
Quando você subtrai a coordenada X do evento com a coordenada X do player, a coordenada X do evento passa a possuir outros valores, ou seja, o valor da subtração.
Quando checar se as coordenadas X do evento com a do player na condição são iguais (para criar as condições com relação ao eixo Y) a coordenada X do evento nunca será igual a coordenada X do player, pois o seu valor inicial foi alterado quando realizamos a subtração.

Para que isso não aconteça, podemos criar duas novas variáveis auxiliares: Ambas armazenam os valores das coordenadas X e Y do evento, assim podemos realizar a subtração com essas variáveis auxiliares, mantendo o valor das coordenadas X e Y do evento sempre corretas, sem alterações:



Agora subtraia o valor auxiliar X pelo valor da coordenada X do personagem:



Troque as verificações de variável com relação à coordenada X do evento nos comandos, pela variável auxiliar X:



Agora sim eu posso dizer que você pode fazer o mesmo para as coordenadas Y, apenas trocando as variáveis: Onde verifica as coordenadas X você troca pela Y, e onde verifica a coordenada Y você troca por X.
E dessa vez a direção a ser verificada não é entre “esquerda” ou “direta” e sim “cima” e “baixo”.
Por fim, o evento nessa parte ficará assim:



Rode o teste e perceba que sempre quando o evento olha à direção do personagem, não importando em qual eixo (X ou Y), se o personagem estiver numa distância de até 6 tiles, o evento consegue lhe detectar:


► Outras utilidades

Esse sistema de sensor não é só útil para a detecção do personagem ou de outros eventos, ele também pode servir para criar um sistema de colisões também.
Eventos colidirem com outros eventos ou com o personagem numa distância que você estipular.

Baixe a demo sobre esse sistema clicando aqui e teste também esse sistema numa função de colisor, também.

Espero que tenham gostado do tutorial e que acima de tudo ele seja útil à você.
Até a próxima.
 
Depósito de Sistemas&Tutoriais © 2013 | Plantilla diseñada por Ciudad Blogger