Página 1 de 1

Pathfinding

Enviado: Ter Jan 10, 2017 8:11 pm
por dkoelho

Código: Selecionar todos

if (mp_grid_path(global.grid, path, x, y, obj_player.x, obj_player.y, 1)){
    path_start(path, 4, path_action_stop, false);
}
eu fiz um sisteminha de pathfinding pro inimigo seguir meu herói. esse código faz parte do Step do obj_enemy.
tô tendo o seguinte erro (na primeira linha do código acima)

Código: Selecionar todos

___________________________________________
############################################################################################
FATAL ERROR in
action number 1
of  Step Event0
for object obj_enemy:

global variable <unknown built-in variable>(-1610512736, -2147483648) not set before reading it.
 at gml_Object_obj_enemy_StepNormalEvent_1 (line 8) - if (mp_grid_path(global.grid, path, x, y, obj_player.x, obj_player.y, 1)){
############################################################################################
e pelo que eu tenho estudado do grid e do pathfinding, seria melhor eu estar fazendo por alarm no lugar de step, como eu posso fazer isso?

Re: Pathfinding

Enviado: Qui Jan 12, 2017 10:29 am
por Dust
Para ativar o patch por alarm, use algo do tipo:
if coisa qualquer {alarm[0]=32}
Aqui você vai estar ativando o alarm [x] em um tempo =x. Se eu não me engano, 32 equivale a 1 segundo.
Seria bom que você utilizasse uma variavel para ativar o alarm, e depois desativalo para que o alarm não seja executado mais de uma vez, e se usar uma variavel não tem problema em fazelo pelo step.
Porém, o erro pode ter sido o jeito que você modelou o seu script, ou em como ele é executado mesmo.
Mas me parece que o erro esta na sua variavel global, parece que você não deu um valor para ela.

Re: Pathfinding

Enviado: Qui Jan 12, 2017 6:13 pm
por Led
O erro aponta que a variável global.grid não foi iniciada ainda. Tem certeza de que a definiu?
Para executar este código no alarme, seria tão simples quanto colocar este código no alarm[0] e definir um valor para o alarm[0] dentro dele mesmo.
No Alarm[0]:

Código: Selecionar todos

if (mp_grid_path(global.grid, path, x, y, obj_player.x, obj_player.y, 1)){
    path_start(path, 4, path_action_stop, false);
}
alarm[0] = 1.5 * room_speed; //room_speed é igual a 1 segundo;
O inimigo "pensaria" no melhor caminho a cada 1.5 segundos com o código acima.

Lembre-se de definir o alarm[0] no create do objeto também.