O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

Sensor de eventos - Tutorial 2

Iniciado por MayLeone, 25/01/2017 às 20:15


[box class=titlebg]► Introdução[/box]
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!

[box class=titlebg]► As variáveis[/box]
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?

[box class=titlebg]► Determinando a distância[/box]
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.

[box class=titlebg]► Variável auxiliar[/box]
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:


[box class=titlebg]► Outras utilidades[/box]
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ê.
Qualquer dúvida podem postar neste tópico.
Até a próxima.