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

Área de Visão

Iniciado por Nefastor, 31/08/2017 às 22:48

31/08/2017 às 22:48 Última edição: 01/09/2017 às 07:47 por Corvo
Eu queria fazer um sistema de RPGMakerMv que o monstro tem uma certa area de visão,ao inimigo entrar nessa área o
inimigo Mostra um balão de exclamação e vai pra cima do personagem.

Queria saber se tem como fazer isso com evento ou so com plugin,e se for por plugin,se puder me passar ai :o:):
...Um veterano preenchido com um remorso, ódio, uma sabedoria experiente trazida sobre dor e cicatrizes.
Ele sabe, como você não quer fazer isso, que não há como escapar do pesadelo, o mundo tornou-se impossível de se ler. E a única saída, é acordar através de uma aceitação da morte...Só assim então, o caçador pode escapar do seu sonho eterno.

Dun!  :lol:

Assim, com evento tem. Tu faz uma primeira página deste evento-inimigo para ficar em processo paralelo, calculando a distancia dele em relação ao personagem. Uma maneira fácil de fazer isso seria subtrair a coordenada X do personagem da coordenada X do inimigo, assim tu teria a distância entre eles no eixo X (horizontalmente). Converte o valor obtido para um número positivo e verifica se está abaixo da distância que tu deseja. Se estiver, tu faz o mesmo processo, porém no eixo Y (verticalmente). Se também estiver abaixo da distância em tiles que deseja, tu ativa uma Switch Local que ativa a página seguinte do evento, que faz com que ele persiga o personagem.

Por plugin o trabalho de sua parte é menor, obviamente. Geralmente ele só pede a definição da distância. O que achei foi este, mas não testei. Entretanto seria bom tu tentar fazer isto por eventos, ainda que seja simplesmente pela ludicidade da atividade.

Citação de: King Gerar online 31/08/2017 às 23:04
Dun!  :lol:

Assim, com evento tem. Tu faz uma primeira página deste evento-inimigo para ficar em processo paralelo, calculando a distancia dele em relação ao personagem. Uma maneira fácil de fazer isso seria subtrair a coordenada X do personagem da coordenada X do inimigo, assim tu teria a distância entre eles no eixo X (horizontalmente). Converte o valor obtido para um número positivo e verifica se está abaixo da distância que tu deseja. Se estiver, tu faz o mesmo processo, porém no eixo Y (verticalmente). Se também estiver abaixo da distância em tiles que deseja, tu ativa uma Switch Local que ativa a página seguinte do evento, que faz com que ele persiga o personagem.

Por plugin o trabalho de sua parte é menor, obviamente. Geralmente ele só pede a definição da distância. O que achei foi este, mas não testei. Entretanto seria bom tu tentar fazer isto por eventos, ainda que seja simplesmente pela ludicidade da atividade.

Desculpe,eu não entendi como fazer por eventos. :facepalm: Se puder explicar ou mostrar passo a passo.
...Um veterano preenchido com um remorso, ódio, uma sabedoria experiente trazida sobre dor e cicatrizes.
Ele sabe, como você não quer fazer isso, que não há como escapar do pesadelo, o mundo tornou-se impossível de se ler. E a única saída, é acordar através de uma aceitação da morte...Só assim então, o caçador pode escapar do seu sonho eterno.

Leia calmamente meu post anterior pois nele explico, é só tu reproduzir passo a passo e se empacar em algum ponto, traga o ponto em que teve dificuldade e veremos ele em específico.
Você irá salvar as coordenadas (inimigo e personagem) em variáveis para fazer os cálculos.

Citação de: King Gerar online 31/08/2017 às 23:04
Dun!  :lol:

Assim, com evento tem. Tu faz uma primeira página deste evento-inimigo para ficar em processo paralelo, calculando a distancia dele em relação ao personagem. Uma maneira fácil de fazer isso seria subtrair a coordenada X do personagem da coordenada X do inimigo, assim tu teria a distância entre eles no eixo X (horizontalmente). Converte o valor obtido para um número positivo e verifica se está abaixo da distância que tu deseja. Se estiver, tu faz o mesmo processo, porém no eixo Y (verticalmente). Se também estiver abaixo da distância em tiles que deseja, tu ativa uma Switch Local que ativa a página seguinte do evento, que faz com que ele persiga o personagem.

Por plugin o trabalho de sua parte é menor, obviamente. Geralmente ele só pede a definição da distância. O que achei foi este, mas não testei. Entretanto seria bom tu tentar fazer isto por eventos, ainda que seja simplesmente pela ludicidade da atividade.

Nessa parte:''Tu faz uma primeira página deste evento-inimigo para ficar em processo paralelo''.Eu crio esse evento inimigo na aba ''Eventos Comuns'' ou em um evento normal?
...Um veterano preenchido com um remorso, ódio, uma sabedoria experiente trazida sobre dor e cicatrizes.
Ele sabe, como você não quer fazer isso, que não há como escapar do pesadelo, o mundo tornou-se impossível de se ler. E a única saída, é acordar através de uma aceitação da morte...Só assim então, o caçador pode escapar do seu sonho eterno.

Citação de: Nefastor online 01/09/2017 às 08:32
Nessa parte:''Tu faz uma primeira página deste evento-inimigo para ficar em processo paralelo''.Eu crio esse evento inimigo na aba ''Eventos Comuns'' ou em um evento normal?
Considerando que não há como criar páginas nos eventos comuns...  :fifufi:
Eu pensei em tu fazendo cada programação no evento do inimigo em específico ao invés de uma para todos inimigos, assim tu poderia variar a área de visão de cada um e não é uma programação muito longa, então acredito valer mais a pena.

01/09/2017 às 09:30 #6 Última edição: 01/09/2017 às 09:40 por Nefastor
Citação de: King Gerar online 01/09/2017 às 09:14
Citação de: Nefastor online 01/09/2017 às 08:32
Nessa parte:''Tu faz uma primeira página deste evento-inimigo para ficar em processo paralelo''.Eu crio esse evento inimigo na aba ''Eventos Comuns'' ou em um evento normal?
Considerando que não há como criar páginas nos eventos comuns...  :fifufi:
Eu pensei em tu fazendo cada programação no evento do inimigo em específico ao invés de uma para todos inimigos, assim tu poderia variar a área de visão de cada um e não é uma programação muito longa, então acredito valer mais a pena.

Eu acho que consegui fazer a area de visão,porem uma coisa eu não consegui fazer.Quando o inimigo avistar o meu personagem ele ira mostrar um balão de exclamação e aparecera um dialogo,so consegui fazer isso quando ele encostar no meu personagem.

Aqui o meu evento:





Ps:Não  sei se você ensinou assim,mas foi assim que eu entendi.
...Um veterano preenchido com um remorso, ódio, uma sabedoria experiente trazida sobre dor e cicatrizes.
Ele sabe, como você não quer fazer isso, que não há como escapar do pesadelo, o mundo tornou-se impossível de se ler. E a única saída, é acordar através de uma aceitação da morte...Só assim então, o caçador pode escapar do seu sonho eterno.

01/09/2017 às 09:32 #7 Última edição: 01/09/2017 às 10:27 por King Gerar
Então, ao fim do cálculo das posições, se tudo tiver dado certo, você irá ativar a Switch Local A do próprio evento. Aí, na próxima página, tu faz ela para ser ativada somente se esta Switch Local estiver ON, e coloca o início para ser automático (caso queira bloquear o movimento do jogador) ou em processo paralelo (caso queira permitir que o jogador continue se movimentando). E nesta página fazer os acontecimentos.


Citação de: Nefastor online 01/09/2017 às 09:30
[hs width=400]https://i.imgur.com/YQwilrq.png[/hs]
Tá, mas de onde vêm essa variável "Área de Visão" que tu colocou na condição? Se o evento for só isso, não há nada atribuindo à ela um valor, logo ela sempre será zero e nunca vai realizar a primeira condição.

Antes desta parte tu deve:
1 - Colocar o valor de uma variável A para ser igual à coordenada X da posição do inimigo no mapa;
2 - Colocar a variável B para ser igual à coordenada X do jogador no mapa;
3 - Subtrair a variável A - variável B;
4 - Converter a variável A para um valor absoluto. Isto pois, se o X do personagem for maior do que o X do inimigo, o resultado da subtração será negativo. Como distância não pode ser negativa, convertemos o valor para absoluto para podermos utilizá-lo na condição usando a expressão
Math.abs($gameVariables.value(n));

Onde 'n' é o ID da variável A. Nesta parte tu pode até ter um pouco mais de dificuldade mesmo, mas tenta reproduzir até aqui e vê se está funcionando.

01/09/2017 às 10:44 #8 Última edição: 01/09/2017 às 10:55 por Corvo
Agora que eu percebi,o inimigo começa a me perseguir de qualquer lugar que eu esteja  :humpf:

tenho que arrumar isso  :T.T:


A seguinte parte:''calculando a distancia dele em relação ao personagem. Uma maneira fácil de fazer isso seria subtrair a coordenada X do personagem da coordenada X do inimigo, assim tu teria a distância entre eles no eixo X (horizontalmente). Converte o valor obtido para um número positivo e verifica se está abaixo da distância que tu deseja. Se estiver, tu faz o mesmo processo, porém no eixo Y (verticalmente). Se também estiver abaixo da distância em tiles que deseja, tu ativa uma Switch Local que ativa a página seguinte do evento, que faz com que ele persiga o personagem.''

Ok,entendi como calcular,mas de acordo com o evento que eu mostrei la em cima eu fiz certo?Pois o inimigo começa a me perseguir de qualquer lugar que eu esteja.



Citação de: King Gerar online 01/09/2017 às 09:32
Então, ao fim do cálculo das posições, se tudo tiver dado certo, você irá ativar a Switch Local A do próprio evento. Aí, na próxima página, tu faz ela para ser ativada somente se esta Switch Local estiver ON, e coloca o início para ser automático (caso queira bloquear o movimento do jogador) ou em processo paralelo (caso queira permitir que o jogador continue se movimentando). E nesta página fazer os acontecimentos.


Citação de: Nefastor online 01/09/2017 às 09:30
[hs width=400]https://i.imgur.com/YQwilrq.png[/hs]
Tá, mas de onde vêm essa variável "Área de Visão" que tu colocou na condição? Se o evento for só isso, não há nada atribuindo à ela um valor, logo ela sempre será zero e nunca vai realizar a primeira condição.

Antes desta parte tu deve:
1 - Colocar o valor de uma variável A para ser igual à coordenada X da posição do inimigo no mapa;
2 - Colocar a variável B para ser igual à coordenada X do jogador no mapa;
3 - Subtrair a variável A - variável B;
4 - Converter a variável A para um valor absoluto. Isto pois, se o X do personagem for maior do que o X do inimigo, o resultado da subtração será negativo. Como distância não pode ser negativa, convertemos o valor para absoluto para podermos utilizá-lo na condição usando a expressão
Math.abs($gameVariables.value(n));

Onde 'n' é o ID da variável A. Nesta parte tu pode até ter um pouco mais de dificuldade mesmo, mas tenta reproduzir até aqui e vê se está funcionando.

No final  la falando da expressão,eu coloco ela no jogo?E se for para colocar eu coloca aonde?Pela ''Etiqueta''?

Aqui como coloquei o evento agora:

...Um veterano preenchido com um remorso, ódio, uma sabedoria experiente trazida sobre dor e cicatrizes.
Ele sabe, como você não quer fazer isso, que não há como escapar do pesadelo, o mundo tornou-se impossível de se ler. E a única saída, é acordar através de uma aceitação da morte...Só assim então, o caçador pode escapar do seu sonho eterno.

Citação de: Nefastor online 01/09/2017 às 10:44
[...]
Aqui como coloquei o evento agora:

[hs width=300]https://i.imgur.com/FK6bHiI.png[/hs]

Mas como a variável Inimigo pode ser igual a 12 se você não definiu ela para valor nenhum antes da condição. Você deve atribuir à ela o valor da coordenada antes de verificar se é igual a 12. Para isto, utilize o comando por eventos Controle de Variável. No campo Operando, marque Dados do Jogo e vá em Character (ou Personagem, não sei como está em português) e lá estará Mapa X, que é o valor da coordenada X no mapa.

Aconselho a dar uma olhada nestes tutoriais também.

Citação de: King Gerar online 01/09/2017 às 10:54
Citação de: Nefastor online 01/09/2017 às 10:44
[...]
Aqui como coloquei o evento agora:

[hs width=300]https://i.imgur.com/FK6bHiI.png[/hs]

Mas como a variável Inimigo pode ser igual a 12 se você não definiu ela para valor nenhum antes da condição. Você deve atribuir à ela o valor da coordenada antes de verificar se é igual a 12. Para isto, utilize o comando por eventos Controle de Variável. No campo Operando, marque Dados do Jogo e vá em Character (ou Personagem, não sei como está em português) e lá estará Mapa X, que é o valor da coordenada X no mapa.

Aconselho a dar uma olhada nestes tutoriais também.

Tipo assim?

...Um veterano preenchido com um remorso, ódio, uma sabedoria experiente trazida sobre dor e cicatrizes.
Ele sabe, como você não quer fazer isso, que não há como escapar do pesadelo, o mundo tornou-se impossível de se ler. E a única saída, é acordar através de uma aceitação da morte...Só assim então, o caçador pode escapar do seu sonho eterno.

01/09/2017 às 12:10 #11 Última edição: 01/09/2017 às 13:50 por King Gerar
Exato. Você fez o segundo passo na enumeração que te passei. Faça o mesmo agora com a coordenada do inimigo, subtraia um do outro e a expressão é para ser usada assim:
Spoiler
[close]

Após isso, aí sim, virá uma condição que verifica se a variável possui um valor menor ou igual à distância que tu quer. Lembrando que, até aqui, estamos calculando a distância horizontal somente. Depois vamos repetir o processo para calcular a vertical também.

01/09/2017 às 18:35 #12 Última edição: 01/09/2017 às 19:27 por Nefastor
Citação de: King Gerar online 01/09/2017 às 12:10
Exato. Você fez o segundo passo na enumeração que te passei. Faça o mesmo agora com a coordenada do inimigo, subtraia um do outro e a expressão é para ser usada assim:
Spoiler
[close]

Após isso, aí sim, virá uma condição que verifica se a variável possui um valor menor ou igual à distância que tu quer. Lembrando que, até aqui, estamos calculando a distância horizontal somente. Depois vamos repetir o processo para calcular a vertical também.

Espera,algo deu errado,o inimigo continua me perseguindo antes de eu chegar nesta area.Olha aqui como ta:

Spoiler
[close]

Porem,na horizontal ele so me persegue quando eu chego nesse certa cordenada,porem na vertical em qualquer lugar ele me segue e por que eu não arrumei ainda ne?

...Um veterano preenchido com um remorso, ódio, uma sabedoria experiente trazida sobre dor e cicatrizes.
Ele sabe, como você não quer fazer isso, que não há como escapar do pesadelo, o mundo tornou-se impossível de se ler. E a única saída, é acordar através de uma aceitação da morte...Só assim então, o caçador pode escapar do seu sonho eterno.

Apesar de tu ter colocado os comandos certos desta vez, tu não entendeu a lógica do negócio. Acompanha comigo:


Temos o bicho, na coordenada X 2 e Y 2 com a visão de 4 tiles de distância. Nosso personagem, por sua vez, está na coordenada X 5 e Y 3. Lembrando que começamos as coordenadas do 0 e do tipe superior esquerdo.

Como vamos saber se o personagem está dentro do campo de visão do bicho? Com o desenho é fácil, pois a área está demarcada em vermelho, então veementemente ele não está. Porém, o computador não tem um desenho para visualizar, daí devemos permitir que o computador por si próprio verifique se o personagem está no campo de visão ou não.

Faremos por partes: primeiro vamos verificar se o personagem está dentro do campo de visão no eixo X (horizontal) do bicho. Se ele estiver, aí sim iremos verificar se ele está no campo de visão do bicho no eixo Y (vertical) também.

Primeiro vamos armazenar a coordenada X do monstro em uma variável, pois esta é a forma de informarmos ao computador onde o monstro está. Sendo assim, nossa primeira variável (que vamos chamá-la de variável A) terá o valor de 2, pois o valor de X na coordenada do monstro é 2.

Agora, para compararmos o quão longe o personagem está do monstro, também precisaremos da coordenada X do personagem. Aí nós vamos pegar outra variável (que vamos chamar de variável B) e armazenar nela o valor da coordenada X do personagem, que é 5. Se salvássemos na mesma variável que salvamos a coordenada do monstro, perderíamos o valor da coordenada do monstro e somente o novo valor (do personagem) seria guardado, pois as variáveis armazenam somente um valor por vez.

Beleza, temos a coordenada do monstro na variável A (2) e a coordenada no personagem na variável B (5).

Da sua casa até sua escola têm 10 pontos de ônibus. Você caminhou até o quarto. Quantos pontos faltam para chegar à escola? Você resolve este problema subtraindo o ponto em que está agora do ponto de destino, ou seja, 10 - 4. Faltam 6 pontos.

A ideia é a mesma. Nosso ponto de destino (ou referência) é o monstro, pois o campo de visão é dele. Logo iremos subtrair a posição do personagem da posição dele.

Variável A - Variável B = 2 - 5 = -3

Mas como disse em um comentário anterior, não há como termos distâncias negativas, daí precisamos transformar este número em um número natural inteiro. Só por comandos por eventos no RPG Maker não conseguimos fazer isto, daí utilizamos uma função em Javascript que é a linguagem de interpretação do código usado pelo programa. Esta função é a que te passei anteriormente.

Não podemos usar -3, então > Math.abs(variável A) = Math.abs(-3) = 3

Pronto! Agora temos o valor da distância entre o monstro e o personagem no eixo X (horizontalmente). Pode verificar na ilustração que, para o monstro chegar em um tile com a mesma coordenada X da posição do personagem, ele terá de andar, no mínimo, 3 tiles.

Em seguida vem a condição que verifica se a distância obtida é menor ou igual ao valor do campo de visão do personagem. Nossa variável A (que agora armazena a distância entre monstro e jogador) tem o valor 3. O campo de visão do monstro é de 2. 3 é menor ou igual a 2? Não. Logo o personagem não está no campo de visão do monstro horizontalmente, portanto, nesse caso, não precisaríamos nem mesmo calcular a distância verticalmente, pois essa condição não se satisfaz.



Ignore qualquer erro pois digitei na pressa de jantar  :lol:
E vamos com calma. Não estamos na metade do sistema para ele funcionar como tu deseja.

[...]


[...]
Ok,mas so irei mostrar o problema que esta ocorrendo.

Aqui irei te dar o exemplo aqui nesse desenho:

Meu personagem está no X 3 e no Y 4,o monstro esta no X6 e Y 4.

Porem,não impora se na Cordenada Y eu estou em:0,1,2,3,4,5. O monstro me persegue em qualquer uma dessas dês que eu esteja na X 3
...Um veterano preenchido com um remorso, ódio, uma sabedoria experiente trazida sobre dor e cicatrizes.
Ele sabe, como você não quer fazer isso, que não há como escapar do pesadelo, o mundo tornou-se impossível de se ler. E a única saída, é acordar através de uma aceitação da morte...Só assim então, o caçador pode escapar do seu sonho eterno.