Entrar
Últimos assuntos
» player não consegue andarpor lovn7 Qui 21 Nov 2024, 13:33
» É possível fazer istó no game maker
por William Lima Qui 21 Nov 2024, 10:56
» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por Lua Sáb 16 Nov 2024, 20:22
» (Resolvido) Cenario longo x Texture Pages
por josuedemoraes Sáb 16 Nov 2024, 15:31
» Kids' band
por Adilson Lucindo Santos Sex 15 Nov 2024, 12:23
» (RESOLVIDO) Engasgos-Troca de Sprites/animações
por josuedemoraes Ter 12 Nov 2024, 01:49
» Block Room - DEMO
por Joton Qua 06 Nov 2024, 22:58
» Game Infinito vertical (subindo)
por macmilam Sáb 26 Out 2024, 12:36
» Retorno da GMBR!!!
por Dancity Ter 22 Out 2024, 16:36
» Máquina de estados
por aminaro Qui 10 Out 2024, 13:33
» como faço pra um objeto colidir com o outro e diminuir a vida do player ?
por josuedemoraes Qui 03 Out 2024, 16:51
» RESOLVIDO: Colisão com objetos moveis
por josuedemoraes Qua 02 Out 2024, 20:28
» Crypt of the Blood Moon
por divin sphere Qua 11 Set 2024, 18:18
» como fazer um objeto seguir?
por divin sphere Dom 18 Ago 2024, 18:08
» Procuro de alguém para Modelar/Texturizar/Animar objetos 3D
por un00brn Dom 11 Ago 2024, 11:10
» Destruição de cenário (estilo DD Tank)
por CoronelZeg Sex 09 Ago 2024, 17:16
» RESOLVIDO-Como destruir uma instancia especifica de um objeto
por josuedemoraes Ter 23 Jul 2024, 00:40
» Automatizar a coleta de id
por GabrielXavier Seg 22 Jul 2024, 18:01
» Preciso de ajuda para concluir um pequeno projeto
por lmoura Qui 27 Jun 2024, 15:45
» ANGULO ACOMPANHAR O OBJETO
por Klinton Rodrigues Qui 27 Jun 2024, 08:34
» Musica reinicia quando sala reinicia
por GabrielXavier Ter 18 Jun 2024, 07:28
» como fazer uma copia de gd
por generico_cube Sex 14 Jun 2024, 15:48
» Square Adventure
por guilherme551 Ter 11 Jun 2024, 09:54
» como posso definir limite de uma variavel
por GabrielXavier Sex 07 Jun 2024, 14:14
» [Resolvido] Dúvida, colisão única de objeto
por vdm842 Sex 24 maio 2024, 09:50
[Resolvido]Objeto pode ser visto dependendo do angulo?
4 participantes
Página 1 de 1
[Resolvido]Objeto pode ser visto dependendo do angulo?
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!
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!
Última edição por gabrielsch em Qui 16 Ago 2012, 13:52, editado 1 vez(es)
gabrielsch- Games Ranking :
Notas recebidas : D + A + A
Data de inscrição : 06/12/2009
Reputação : 28
Número de Mensagens : 1230
Prêmios :
x 0 x 0 x 0
x 1 x 2 x 0
x 1 x 0 x 0
Re: [Resolvido]Objeto pode ser visto dependendo do angulo?
tente isso
use no objeto que vai ser visto no raio de visão
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
}
Re: [Resolvido]Objeto pode ser visto dependendo do angulo?
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.
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.
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
}
}
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- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
Nossa
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- Data de inscrição : 29/10/2011
Reputação : 4
Número de Mensagens : 510
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Resolvido]Objeto pode ser visto dependendo do angulo?
É 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).God_of_war425 escreveu:mais se que sabe todo mundo iguinora minha resposta mesmo =(.flw
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- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
Re: [Resolvido]Objeto pode ser visto dependendo do angulo?
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!
gabrielsch- Games Ranking :
Notas recebidas : D + A + A
Data de inscrição : 06/12/2009
Reputação : 28
Número de Mensagens : 1230
Prêmios :
x 0 x 0 x 0
x 1 x 2 x 0
x 1 x 0 x 0
Tópicos semelhantes
» Mudar seleção dependendo do objeto....
» [RESOLIVOD]Porque quando eu clico em cima de um objeto cria um objeto lá sendo que não pode colocar lá?
» Healthbar aumentar dependendo da distância para algum objeto
» [resolvido] dependendo do Nivel ????
» Mudar ângulo de um objeto
» [RESOLIVOD]Porque quando eu clico em cima de um objeto cria um objeto lá sendo que não pode colocar lá?
» Healthbar aumentar dependendo da distância para algum objeto
» [resolvido] dependendo do Nivel ????
» Mudar ângulo de um objeto
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos