2016-02-19 161 views
0

我正在嘗試做一個基於回合的遊戲,並且每個敵人都應該找到一個玩家節點的路徑。我使用的是gameplaykit的尋路方式,每次敵人轉彎時,我都會確保從GKGridGraph中移除其他敵人(這樣敵方不會互相走路),後面我會添加相同的節點。GKGridGraph找不到路徑

NSMutableArray <GKGridGraphNode *> *walls = [NSMutableArray array]; 

for(SKNode *mapNode in enemies) 
    { 
    for(SKNode *node in mapNode.children) 
     { 
     if((node.position.x != enemy.position.x)||(node.position.y != enemy.position.y)) 
      { 
      GKGridGraphNode *graphNode = [_NewGraph nodeAtGridPosition: 
      (vector_int2){(node.position.x-300)/70, (node.position.y-180)/70}]; 
      [walls addObject:graphNode]; 
      } 
     } 
     } 
[_NewGraph removeNodes:walls]; 

GKGridGraphNode* GKenemyNode = [_NewGraph nodeAtGridPosition:(vector_int2) 
         {(enemy.position.x-300)/70, (enemy.position.y-180)/70}]; 

GKGridGraphNode* GKplayerNode = [_NewGraph nodeAtGridPosition:(vector_int2) 
         {(player.position.x-300)/70,(player.position.y-180)/70}]; 
NSArray<GKGridGraphNode *> *path = [_NewGraph findPathFromNode:GKenemyNode toNode:GKplayerNode]; 
[_NewGraph addNodes:walls]; 

如果我註釋掉行removeNodes和addNodes一切工作正常。

編輯:每次創建新的類對象可能會返回生成的GKGridGraph而不是重新分配相同的一個是否是個好主意?

回答

0

Okey,所以我找到了答案,並希望與大家分享! 刪除節點後,我這樣做(無需添加節點像我一樣):

for(GKGridGraphNode *node in walls) 
{ 
    [NewGraph connectNodeToAdjacentNodes:node]; 
} 

NewGraph = nil; 

好運!