[Resolvido]Checar objeto mais próximo

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

Resolvido [Resolvido]Checar objeto mais próximo

Mensagem por Limalokão em Dom 27 Fev 2011, 14:54

Olá amigos e amigas, gostaria de saber o seguinte:

Tenho um objeto que é criado com o clique do mouse (Quantos objetos eu quiser), e dentro da room eu tenho o inimigo! Quando eu crio o player ele vai andando aos poucos e quando chega a 100 pixel do inimigo o inimigo começa a atirar! Até ai tudo bem, mas o problema é: Quando eu crio um player bem longe do inimigo e logo após crio um à 50px de distancia do inimigo, ao invés de o inimigo atirar no que esta mais próximo ele atira no que esta no fundao da sala! entendem? Ou seja, PARECE QUE O INIMIGO ESTA CHECANDO O PRIMEIRO PLAYER NA SALA E NÃO O QUE ESTÁ MAIS PRÓXIMO! Os códigos que estou usando são os seguintes:

NO STEP DO PLAYER:
Código:
if instance_nearest(x,y-100,inimigo_1) //quando o player está próximo do inimigo
{
  with(inimigo_1) //o inimigo
  {
      instance_change(inimigo_1_2,1) //troca para o inimigo atirador
  }
}

NO CREATE DO INIMIGO ATIRADOR:
Código:
if instance_nearest(x,y+100,player_1)
{
var_tiro=1
alarm[0] = 2*room_speed
tiro=true
}

NO ALARM[0] DO INIMIGO ATIRADOR:
Código:
if instance_nearest(x,y+100,player_1)
{
tiro=true
alarm[0] = 2*room_speed
}

NO STEP DO INIMIGO ATIRADOR:
Código:
if !instance_exists(player_1)
{
instance_change(inimigo_1,1);
}
if (distance_to_object(player_1) > 100)
{
instance_change(inimigo_1,1);
}

if instance_nearest(x,y+100,player_1)
{
  image_angle=point_direction(x,y,player_1.x,player_1.y);
  if instance_exists(player_1) && distance_to_object(player_1) < 100
  {
    if tiro=true
        {
        with(instance_create(x,y,object9))
        {
        motion_set(point_direction(x,y,player_1.x,player_1.y),20)
          sound_play(sound0)
        }
        }
        else
        {
        //
        }
      tiro=false
  }
}

e é isso! Alguém consegue me dizer o por que o inimigo está checando o primeiro player a ser colocado na room? Vlws cheers


Última edição por Soul Limaloko em Dom 27 Fev 2011, 15:32, editado 1 vez(es)

Limalokão

Ranking : Nota C
Número de Mensagens : 803
Idade : 24
Data de inscrição : 24/11/2009
Notas recebidas : C
Reputação : 10
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]Checar objeto mais próximo

Mensagem por Math Maker em Dom 27 Fev 2011, 15:02

Assim, somente com os scripts, é muito difícil de achar uma resolução para seu problema, pois mesmo criando algo semelhante aqui, posso não achar uma solução que funcione ai. Poste uma engine com as funções que apresentam problemas, assim poderei estar te ajudando.

Math Maker

Número de Mensagens : 107
Idade : 21
Data de inscrição : 26/02/2011
Reputação : 6
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]Checar objeto mais próximo

Mensagem por Hatzo enkiri em Dom 27 Fev 2011, 15:07

Achei o erro que está no último código(no step do inimigo):
Código:
image_angle=point_direction(x,y,player_1.x,player_1.y);
Isso faz com que ele atire no primeiro objeto criado.
Para resolver isso crie uma variável que armazene o valor do instance_nearest.Daí vc pode usar ela depois.

Hatzo enkiri

Ranking : Nota B
Número de Mensagens : 226
Idade : 22
Data de inscrição : 19/02/2009
Notas recebidas : B
Reputação : 7
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]Checar objeto mais próximo

Mensagem por Willy em Dom 27 Fev 2011, 15:13

Você ésta definindo jogador como o mais proximo atraves do propio jogador.
Você pode fazer asism:

//Step do inimigo
jog_proximo=instance_nearest(x,y+100,player_1)

Ai, no objeto do inimigo, o codigo do image angle ficaria assim:
image_angle=point_direction(x,y,jog_proximo.x,jog_proximo.y);

Esse mesmo esquema deve ser aplicado a todos as ações que se dirigem ao jogador, comopor exemplo, o motion_set.

Espero ter ajudado.
blz

___________


Engines, tutoriais e projetos? Clique no banner!



Atenção:
Comporte-se, senão você vai levar a cintada do Willy no meio da bunda! bravo


Willy

Ranking : Nota A
Número de Mensagens : 1812
Idade : 23
Data de inscrição : 08/06/2009
Notas recebidas : C + B + A + A
Reputação : 245
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 1
   : 1

http://willy-gmbr.blogspot.com/

Voltar ao Topo Ir em baixo

Resolvido Re: [Resolvido]Checar objeto mais próximo

Mensagem por Hatzo enkiri em Dom 27 Fev 2011, 15:18

Só não esquece de por no create do inimigo o:
Código:
jog_proximo=0
E depois faça o que o willy falou substituindo os códigos.Se tiver mais alguma dúvida pode mandar.

Hatzo enkiri

Ranking : Nota B
Número de Mensagens : 226
Idade : 22
Data de inscrição : 19/02/2009
Notas recebidas : B
Reputação : 7
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]Checar objeto mais próximo

Mensagem por Willy em Dom 27 Fev 2011, 15:25

Hatzo enkiri, a criação dessa variavel não é necessaria, pois é como se fosse um atalho para aquele bloco de codigos. Eu costumo usar essa técninca para facilitar na criação dos meus cógidos. Por exemplo, ao inves de eu escrever keyboard_check_released(vk_up) um monte de vez, eu faço assim:
Código:
kr_up=keyboard_check_released
Ai nos códigos, eu criaria assiim:

Código:
if kr_up{
//Ação
}
Isso facilita muito, recomendo que todos vocês façam isso também! Mas lembre-se, se usar isso no step (por exemplo), ele so funcinara no step.

Mas voltando ao assunto principal, ei esqueci de mensionar um detalhe que se não for adicionada, vai dar erro.
Toda ves que for usar o "jog_proximo" envolva o comando if instance_exists(jog_proximo) em todo o código para que não de erro.
[EDIT]
Mas pensando bem, acho que o que o Hatzo enkiri falou pode dar certo declarando a variavel. Acho que fica até mais pratico. anh!

blz


Última edição por Willy em Dom 27 Fev 2011, 15:29, editado 1 vez(es) (Razão : Mas pensando bem...)

___________


Engines, tutoriais e projetos? Clique no banner!



Atenção:
Comporte-se, senão você vai levar a cintada do Willy no meio da bunda! bravo


Willy

Ranking : Nota A
Número de Mensagens : 1812
Idade : 23
Data de inscrição : 08/06/2009
Notas recebidas : C + B + A + A
Reputação : 245
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 1
   : 1

http://willy-gmbr.blogspot.com/

Voltar ao Topo Ir em baixo

Resolvido Re: [Resolvido]Checar objeto mais próximo

Mensagem por Cabeçalho Onlin'E em Dom 27 Fev 2011, 15:25

eu testei os codigos que o hatzo flo no meu joguinho e deu certo agr so falta vc tentar

Cabeçalho Onlin'E

Ranking : Nota D
Número de Mensagens : 285
Idade : 23
Data de inscrição : 19/02/2011
Notas recebidas : D
Reputação : 3
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]Checar objeto mais próximo

Mensagem por Limalokão em Dom 27 Fev 2011, 15:31

Boa galera Consegui! Vlws! =D

Limalokão

Ranking : Nota C
Número de Mensagens : 803
Idade : 24
Data de inscrição : 24/11/2009
Notas recebidas : C
Reputação : 10
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]Checar objeto mais próximo

Mensagem por Conteúdo patrocinado Hoje à(s) 01:54


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