Conectar-se
Quem está conectado
20 usuários online :: Nenhum usuário registrado, Nenhum Invisível e 20 Visitantes

Nenhum

Ver toda a lista


Compartilhe
Ver o tópico anteriorIr em baixoVer o tópico seguinte
avatar
Ranking : Nota C
Notas recebidas : C
Data de inscrição : 24/11/2009
Número de Mensagens : 803
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 10

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

[Resolvido]Checar objeto mais próximo

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)
avatar
Data de inscrição : 26/02/2011
Número de Mensagens : 107
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 6

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

Re: [Resolvido]Checar objeto mais próximo

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.
Ranking : Nota B
Notas recebidas : B
Data de inscrição : 19/02/2009
Número de Mensagens : 226
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 7

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

Re: [Resolvido]Checar objeto mais próximo

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.
avatar
Ranking : Nota A
Notas recebidas : C + B + A + A
Data de inscrição : 08/06/2009
Número de Mensagens : 1846
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 254

Prêmios
   : 2
   : 1
   : 1
Ver perfil do usuáriohttp://willy-gmbr.blogspot.com/

Re: [Resolvido]Checar objeto mais próximo

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
Ranking : Nota B
Notas recebidas : B
Data de inscrição : 19/02/2009
Número de Mensagens : 226
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 7

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

Re: [Resolvido]Checar objeto mais próximo

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.
avatar
Ranking : Nota A
Notas recebidas : C + B + A + A
Data de inscrição : 08/06/2009
Número de Mensagens : 1846
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 254

Prêmios
   : 2
   : 1
   : 1
Ver perfil do usuáriohttp://willy-gmbr.blogspot.com/

Re: [Resolvido]Checar objeto mais próximo

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...)
avatar
Ranking : Nota D
Notas recebidas : D
Data de inscrição : 19/02/2011
Número de Mensagens : 285
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 3

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

Re: [Resolvido]Checar objeto mais próximo

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
avatar
Ranking : Nota C
Notas recebidas : C
Data de inscrição : 24/11/2009
Número de Mensagens : 803
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 10

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

Re: [Resolvido]Checar objeto mais próximo

em Dom 27 Fev 2011, 15:31
Boa galera Consegui! Vlws! =D
Ver o tópico anteriorVoltar ao TopoVer o tópico seguinte
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum