Forums » RPG Maker VX Ace

Detecção de Posicionamento e Distância de Eventos - Parte 2

    • 206 posts
    29 de maio de 2015 20:36:52 ART

    Introdução

    Salve Galera!

    Dando sequência a série de tutoriais sobre detecção de eventos, rotinas e behaviors, trago agora a segunda parte, focada especialmente nas demais detecções. Na tutorial anterior falei sobre como criar uma verificação de distância entre dois characters e também pude introduzir um pouco da metodologia de desenvolvimento que sigo.

    Para via de consulta, se você ainda não leu o tutorial anterior, segue o link:

    Detecção de Posicionamento e Distância de Eventos - Parte 1

     

    Detecção de Posicionamento e Distância de Eventos

    Seguindo nossa linha de trabalho, hoje falaremos das detecções em linha.

    Imagem Postada

    Utilizando os códigos criados previamente, vamos partir para a segunda detecção, a mais simples de todas: Estar na frente do evento. Esta detecção vai exigir outra variável além das anteriormente vista, precisamos saber qual direção o evento está direcionado:

    Coordenadas X e Y de cada Evento
    Coordenadas X e Y do personagem Herói
    Direção para aonde o evento está virado
    Direção para aonde o herói está virado



    Esta variável também pode ser encontrada no Game_CharacterBase com a alcunha de @direction:

    Imagem Postada

    Esta é uma variável de números inteiros e dito isso precisamos entender os valores que significam cada direção. A imagem abaixo ilustra os valores:

    Imagem Postada

    Os valores escrito na cor roxa significam valores padrão do RPG Maker e os em Amarelo são valores que usaremos futuramente.

    Já sabemos como detectar para onde o evento está virado, agora precisamos criar um método que verifique se o herói está na frente do evento. Uma outra característica importante é dar um range máximo de visão, estipulando quando tiles o evento consegue ver.

    Como não precisamos colocar nenhuma informação em nosso evento, podemos partir diretamente para o Game_Interpreter e criar lá nossa verificação. Começamos criando um método para verificar se o herói está na frente do evento e recebendo uma quantidade de tiles máximo que ele pode ser visto:

    Imagem Postada

    A partir disso podemos começar a fazer nossas verificações. Vamos tentar entender o que precisa ser checado:

    Imagem Postada

    Detalhando as verificações

    Imagem PostadaImagem Postada
    Imagem PostadaImagem Postada

    Onde Range é a coordenada somando ou diminuindo a quantidadede tiles solicitada. E com esse entendimento, podemos construir o nosso código.

    Façamos um case para múltiplas opções e nele façamos os retornos. O método deve ficar parecido com a imagem abaixo:

    Imagem Postada

    Comentei apenas o primeiro case para poder caber dentro da imagem, mas no código deixarei completamente comentado. Com nosso método pronto, podemos testa-lo com alguns eventos no mapa configurados assim:

    Imagem Postada

    E nas condições:

    Imagem Postada

    Porém temos um bug aí. Vocês podem perceber que a detecção de visão tem um erro quando encontra alguma parede, como a imagem abaixo:

    Imagem Postada

    Então, temos que mudar nosso método na_frente. Precisamos agora verificar a passabilidade entre o centro até o ponto máximo de visão. Caso tenha algo fechando a visão, precisamos retornar falso. Podemos fazer isso usando o comado for e alterando um pouco o método.

    Imagem Postada

    Agora sim, resolvi o meu problema de verificar visão do evento.

    Veja um vídeo do funcionamento:

    http://youtu.be/9VQoNUdX3VY

    Material

     

    Link para download do Projeto.

     

    Até o próximo tutorial da série!