2014-10-05 54 views
0

同一對象的其他實例我有一個遊戲,有多個敵人誰必須追逐一個單一的球員。我使用帶有mp_grid和路徑的GML A *路徑查找來設置路徑查找。然而,這些敵人在尋找玩家時可以彼此重疊。爲了解決這個問題,我還告訴路徑忽略敵人以及mp_grid_add_instances,但是他們完全停止移動,因爲他們將自己視爲障礙,因此陷入了邊界框。有沒有辦法可以用mp_grid_add_instances添加「所有其他敵人,但自己」?遊戲製作工具:工作室 - 使對象避免與A * pathfinding

這裏是我的網創建代碼(在CONTROLS類初始化變量):

global.zombie_ai_grid = mp_grid_create(0, 0, room_width/50, (room_height - sp_dashboard.sprite_height)/50, 50, 50); 
mp_grid_add_instances(global.zombie_ai_grid, obj_obstacle, false); 

這是我的路初始化代碼(在殭屍類):

path = path_add(); 
alarm[0] = 5; 

這是我的路徑創建報警0中的代碼(路徑每2秒更新一次):

mp_grid_path(global.zombie_ai_grid, path, x, y, nearest.x, nearest.y, true); 
path_set_kind(path, 1); 
path_set_precision(path, 8); 

path_end(); 
path_start(path, MAX_SPEED, 0, true); 

alarm[0] = room_speed * 2; 

回答

1

您需要清除ea單元格在計算一條路徑之前先對敵人進行調整,然後再設置。就像這樣:

mp_grid_clear_cell(global.zombie_ai_grid, x div CELL_SIZE, y div CELL_SIZE); 
mp_grid_path(global.zombie_ai_grid, path, x, y, nearest.x, nearest.y, true); 
mp_grid_add_cell(global.zombie_ai_grid, x div CELL_SIZE, y div CELL_SIZE); 

但需要注意的是,兩個敵人不能有衝突(位於同一小區),否則敵人不會被標記爲一個障礙。


其他方式:

mp_grid_clear_all(global.zombie_ai_grid); 
with (obj_obstacle) 
{ 
    if (id != other.id) 
    { 
     mp_grid_add_instances(global.zombie_ai_grid, id, false); 
    } 
} 

如果這將工作速度太慢,那麼你需要做一個隊列,每次你需要計算只有幾殭屍的路徑一步。