GKGridGraph发现路径不起作用

时间:2016-02-19 16:20:28

标签: objective-c gameplay-kit

我试图制作一个回合制游戏,每个敌人都应找到一条通向玩家节点的路径。我正在使用gameplaykit的寻路,每次敌人必须转弯时,我一定要从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];

如果我注释掉行删除节点和addNodes,一切正常。

编辑:每次创建可以返回生成的GKGridGraph而不是重新分配相同的GKGridGraph的新类对象是不是一个好主意?

1 个答案:

答案 0 :(得分:0)

Okey,所以我找到了答案,并希望与大家分享! 删除节点后我做了这个(不需要像我那样添加节点):

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

NewGraph = nil;

GoodLuck!