🤔 Para Refletir :
"Seu jogo nao precisa ser o melhor ou o mais popular, apenas precisa fazer o dia de alguem melhor"
- codingkitsune

Sensor de eventos - Tutorial 2

Mayleone Feminino

Conde
Membro
Membro
Console.Write("Hello World!");
Juntou-se
25 de Outubro de 2016
Postagens
267
Bravecoins
3.095
mabvB.png

? 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:

TrsWgKd.png


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

iUpBWSJ.png


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:

ZWIlwUc.png


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:

j3oG0LN.png


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:

4mI1N9D.png


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:

TVwOpJr.png


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:

WcvYcbz.png


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.

yjyDvwW.png

Sensor detectando personagem.

PlTbRR1.png

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:

BKVlsK7.png


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

mMTQe2n.png


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

MWbktgP.png


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:

lSzCgIW.png


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:

rj9UXIP.png


? Outras utilidades

[size=12pt]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.
 
Hallow, Mayleone!

Mudou de avatar, né? Nem tava reconhecendo. Grande tutorial, como sempre!
Seguinte: Tentei baixar esse link aqui duas vezes, mas meu google chrome não quis terminar de baixar dizendo que detectou vírus nele. Tentei também pelo Mozilla Firefox, mas deu mal sucedido. Dá uma olhada nele aí e vê o que tá acontecendo.


[error]Baixe a demo sobre esse sistema clicando aqui e teste também esse sistema numa função de colisor, também.[/error]
 
Obrigada pelo aviso do link [member=1047]InterPlay[/member] !
Talvez seja porque eu upei o arquivo diretamente em .exe e não zipado, vou upar o arquivo em zip, talvez isso resolva!
 
[member=895]Mayleone[/member] Boa tarde, eu encontrei seu tópico e resolveu meu problema!
porem fiquei interessado em saber como funciona a questão dos projeteis aqui, poderia explicar ou se possível liberar um link de Download do projeto aberto pra usar como estudo?
De qualquer forma muito obrigado pelo tutorial acima, consegui concluir meu ABS sem falhas na colisão do escudo e espada, meu metodo que era o erro!
Não tinha conhecimento dessa forma que você usou,
estava usando call >$game_variables[ x ] == $game_variables[x2] (+ 1ou - 1) $game_variables[y] == $game_variables[y2] (+ 1ou - 1)
de alguma forma estava pegando as áreas da lateral causando bugs '0'

Aguardo seu retorno!
 
Olá [member=1205]JulioRPGCriator[/member] !
Não sei porque na época eu encriptei o projeto, acho que foi para ''forçar'' as pessoas a seguirem o tutorial, ao invés de baixar a DEMO diretamente. XD
Enfim, aqui está a versão desencriptada: https://mega.nz/#!hHogVKSS!IDQGKL9XaqkAQ0HUxz5dKuPkFfS5LXH8zwqnmyj3bNo
Lá tem o exemplo do projétil e etc.
 
Entendi, Ótima técnica para prender a atenção da pessoa na explicação!
Bom, fico grato por disponibilizar, se eu tiver alguma duvida te procuro!
Tópico de OURO! Ensina muito bem! Parabéns continue assim!
 
Voltar
Topo Inferior