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

Nenhum

Ver toda a lista


Compartilhe
Ver o tópico anteriorIr em baixoVer o tópico seguinte
avatar
Data de inscrição : 28/08/2010
Número de Mensagens : 599
Insígnias de JAM :

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

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

Saber qual objeto está mais proximo do fim do path

em Ter 15 Out 2013, 23:23
estou criando um jogo de tower defense e quero saber qual objeto está mais proximo do fim do path, para que o 'tiro' atinja ele.

estou usando instance_nearest, entao ele ataca o objeto mais proximo, porem eu quero que ele ataque o mais perto do final do path.

abraços.
Ranking : Nota C
Notas recebidas : C+B
Data de inscrição : 26/07/2008
Número de Mensagens : 6037
Insígnias de JAM :

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

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

Re: Saber qual objeto está mais proximo do fim do path

em Qua 16 Out 2013, 01:24
Sempre que lido com distâncias, uso priority queues.

Código:
var vitPrio;
vitPrio = ds_priority_create(); //cria uma lista
with(alvo){ //para todas as instâncias de "alvo"
   ds_priority_add(vitPrio, id, point_distance(x, y, path_get_x(path, 1), path_get_y(path, 1))); //adiciona a distância da instância até o final do path na lista
   }
mais_proxima = ds_priority_find_min(vitPrio); //pega a que está mais perto

ds_priority_destroy(vitPrio); //liberar a memória
Acredito que seja a melhor forma de fazer isso no GM.
avatar
Ranking : Sem avaliações
Data de inscrição : 14/04/2011
Número de Mensagens : 691
Insígnias de JAM :

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

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

Re: Saber qual objeto está mais proximo do fim do path

em Qua 16 Out 2013, 09:10
Pedro, na verdade a função correta é:
path_get_point_x(index, n);
e
path_get_point_y(index, n);

Sendo N o valor do último ponto da path.

Aliás, N tbm pode ser encontrado pela função:
path_get_number(index);


Ou seja, o simples código abaixo deve resolver:
Código:

tamanho=path_get_number(sua_path);
alvo = instance_nearest(path_get_point_x(sua_path, tamanho), path_get_point_y(sua_path, tamanho), seu_objeto);
avatar
Ranking : Sem avaliações
Data de inscrição : 08/06/2008
Número de Mensagens : 2314
Insígnias de JAM :

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

Prêmios
   : 3
   : 0
   : 1
Ver perfil do usuáriohttp://blackcapapps.blogspot.com.br/

Re: Saber qual objeto está mais proximo do fim do path

em Qua 16 Out 2013, 11:06
path_position retorna um valor de 0 a 1, sendo 0 o começo e 1 o final independente do tamanho da path.
Sendo assim.

Código:
var ini_id,d;
ini_id = noone;
d = 0;

with (objInimigos) {
    if path_position > d ini_id = id;
}

alvo = ini_id;
Ranking : Nota C
Notas recebidas : C+B
Data de inscrição : 26/07/2008
Número de Mensagens : 6037
Insígnias de JAM :

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

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

Re: Saber qual objeto está mais proximo do fim do path

em Qua 16 Out 2013, 13:06
Fred, path_get_x(path, pos) também está correto, pois pede a posição no path (de 0 a 1). O path_get_point_x(path, point) pede um ponto. Mesmo assim, seu código me fez ver que compliquei as coisas. Então poderia ficar assim:

Código:
alvo = instance_nearest(path_get_x(sua_path, 1), path_get_y(sua_path, 1), seu_objeto);
Kabeção, estou em dúvida se esse código funciona.

avatar
Ranking : Nota B
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Número de Mensagens : 2964
Insígnias de JAM :

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

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

Re: Saber qual objeto está mais proximo do fim do path

em Qua 16 Out 2013, 19:28
PedroX, um path pode passar pertinho do final e dar uma volta imensa antes de CHEGAR no final. Tem que ser path_position, mesmo.
path_get_x/y te retorna os "nós" do path, ou seja, os pontos usados pra criar o path.
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