[Resolvido]Objeto pode ser visto dependendo do angulo?

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Resolvido [Resolvido]Objeto pode ser visto dependendo do angulo?

Mensagem por gabrielsch em Qui 16 Ago 2012, 00:15

O titulo ja diz praticamente tudo, sei que há perguntas parecidas mas nunca nenhuma consegui responder o que eu queria, para demonstrar o que eu quero vou mostrar essa imagem:


Verde = Pode ser visto;
Vermelho = Não pode ser visto;

O objetivo seria verificar se o objeto pode ser visto dependo do angulo de visão do personagem, ja consegui fazer com uma linha reta mas nunca com o fator do angulo.
Alguém pode me ajudar com essa duvida?

Flw! sorrindo2


Última edição por gabrielsch em Qui 16 Ago 2012, 13:52, editado 1 vez(es)

___________


Acesse: http://foxen.com.br/



gabrielsch

Ranking : Nota A
Número de Mensagens : 1229
Idade : 21
Data de inscrição : 06/12/2009
Notas recebidas : D + A + A
Reputação : 28
Insignia 1 x 1 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 2
   : 0

Voltar ao Topo Ir em baixo

Resolvido Re: [Resolvido]Objeto pode ser visto dependendo do angulo?

Mensagem por Jiraya em Qui 16 Ago 2012, 00:27

tente isso
use no objeto que vai ser visto no raio de visão
Código:

dir=point_direction(OBJ_VISAO.x,OBJ_VISAO.y,x,y);
ANGLE_DIFF=abs(((((OBJ_VISAO.direction-dir)mod 360)+540)mod 360)-180);//diferença dos angulos

if(ANGLE_DIFF<45)
{
//então o objeto é visivel
}

Jiraya

Ranking : Nota A
Número de Mensagens : 1134
Data de inscrição : 20/03/2010
Notas recebidas : A+A
Reputação : 108
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 1

https://www.facebook.com/seito.washiro.7

Voltar ao Topo Ir em baixo

Resolvido Re: [Resolvido]Objeto pode ser visto dependendo do angulo?

Mensagem por saim em Qui 16 Ago 2012, 08:52

Genial, Jiraya! Eu conhecia esse código de ANGLE_DIFF, mas jamais pensaria em usar ele nessa situação. Pra limitar a área de visão, basta adicionar um "and point_distance < limite".
Até VER o código sendo usado, eu pensaria em usar um objeto com uma sprite, como o foco de uma lanterna, pra servir de teste de colisão. O objeto-lanterna seguiria o objeto-visão (através de códigos no próprio objeto-visão) e teria eventos de colisão pra visibilidade.

Em ambos os casos, paredes são um problema, pois nenhuma das alternativas leva elas em conta. Acredito que um collision_line resolva isso.
Código:
SE (é visível por qualquer meio acima){
  SE (a collision_line retornou noone){
    // aí é visível mesmo
    }
    ELSE {
      SE (a collision_line retornou uma parede){
          // aí é invisível
          }
  }
Mas e se a collision_line não retornar nem noone nem uma parede? Bom, aí depende do que ela retorna. Se retorna algo que bloqueie a visão, como uma caixa grande ou uma porta, permanece invisível, se retornar uma janela ou um fantasma, fica visível. Pra reduzir o número de if-else's ou or's, eu usaria parents (criaria um objeto "bloqueia-visão" e faria todos os objetos do jogo serem ou não serem childs dele).
Ainda tem o problema de visualizar um pedacinho do objeto mas, como a origem do objeto fica no centro, a collision_line retornar um objeto-bloqueia-visão. Mas isso já requer uma aproximação alternativa, mais elaborada (leia: "consome mais memória"), ao problema. Podemos ir a fundo, se for necessário.

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Resolvido Nossa

Mensagem por God_of_war425 em Qui 16 Ago 2012, 10:56

Parece que vocês gostam do geito mais dificl,não é mais facil você criar uma sprite por para elá seguir o image angle deste objto,e fazer comque se o player encostar nela siguinifica que ele está vendo,e bem mais facil e pratico não é nessesario este metodo complicado,mais se que sabe todo mundo iguinora minha resposta mesmo =(.flw

God_of_war425

Número de Mensagens : 510
Idade : 18
Data de inscrição : 29/10/2011
Reputação : 4
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Resolvido Re: [Resolvido]Objeto pode ser visto dependendo do angulo?

Mensagem por saim em Qui 16 Ago 2012, 11:38

God_of_war425 escreveu:mais se que sabe todo mundo iguinora minha resposta mesmo =(.flw
É que ela já foi comentada. Se você observar o segundo parágrafo de meu post anterior, é exatamente o que eu faria ANTES de ver a sugestão do Jiraya. Os parágrafos seguintes são a respeito do problema dessa idéia (e da outra também).

Mas "mais fácil" nem sempre significa "melhor".
O código do ANGLE_DIFF usa um bocado de operações de mod, o que é lento de ser calculado, enquanto não usa uma única sprite sequer - o que reduz um pouco o tamanho do arquivo.
E ele tem a vantagem de te dar a resposta instantaneamente. Usar um outro objeto e um evento de colisão pode fazer com que a resposta chegue um step atrasado (nem sempre isso acontece, é só um risco que existe). Não que um step de atraso costume influenciar no gameplay - acontece, mas é uma raridade.

Agora, tenha um mente um detalhe importante: deve-se usar um OBJETO, não uma SPRITE pra isso. Uma sprite não te retorna nada, não tem eventos de colisão, não sabe o que é place_meeting. Sprites servem pra ser desenhadas na tela, mais nada. Objetos, sim, tendo uma mask (que pode ser igual à sprite), podem definir se, naquela posição e naquele image_angle eles estarão colidindo ou não com outros objetos.
Infelizmente, não existe como fazer essa verificação com uma sprite diferente daquela usada pelo objeto.
A não ser literalmente mudando a sprite_index e depois voltando pra sprite_index anterior. Mas aí, você vai estar comendo uma quantidade ainda maior (e desnecessária) de memória.

Enfim, o que realmente importa é pesar as duas soluções na balança. O que é mais caro: tamanho do arquivo ou velocidade de processamento? Qual solução é mais RÁPIDA?
Eu não tenho as respostas pra essas perguntas e, no final das contas, acho que faria pouca diferença.

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Resolvido Re: [Resolvido]Objeto pode ser visto dependendo do angulo?

Mensagem por gabrielsch em Qui 16 Ago 2012, 13:51

Jiraya escreveu:tente isso
use no objeto que vai ser visto no raio de visão
Código:

dir=point_direction(OBJ_VISAO.x,OBJ_VISAO.y,x,y);
ANGLE_DIFF=abs(((((OBJ_VISAO.direction-dir)mod 360)+540)mod 360)-180);//diferença dos angulos

if(ANGLE_DIFF<45)
{
//então o objeto é visivel
}

Dei uma estuda no código e consegui fazer o que eu queria, ja imaginava que teria que usar o mod.
Com certeza você vai estar nos créditos, muito obrigado.

God_of_war425 escreveu:Parece que vocês gostam do geito mais dificl,não é mais facil você criar uma sprite por para elá seguir o image angle deste objto,e fazer comque se o player encostar nela siguinifica que ele está vendo,e bem mais facil e pratico não é nessesario este metodo complicado,mais se que sabe todo mundo iguinora minha resposta mesmo =(.flw

No caso do meu jogo a visão do mapa é MUITO grande e por isso é inviável usar uma sprite muito grande para verificar isso, alias, ja tentei isso em outro jogo e não deu certo.
Mesmo assim foi uma tentativa.

Tópico Resolvido!

Flw! sorrindo2

___________


Acesse: http://foxen.com.br/



gabrielsch

Ranking : Nota A
Número de Mensagens : 1229
Idade : 21
Data de inscrição : 06/12/2009
Notas recebidas : D + A + A
Reputação : 28
Insignia 1 x 1 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 2
   : 0

Voltar ao Topo Ir em baixo

Resolvido Re: [Resolvido]Objeto pode ser visto dependendo do angulo?

Mensagem por Conteúdo patrocinado Hoje à(s) 17:46


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum