GKGridGraph 查找路径不工作
GKGridGraph find path not working
我正在尝试制作一款回合制游戏,每个敌人都应该找到通往玩家节点的路径。我正在使用 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];
如果我注释掉行 removeNodes 和 addNodes 一切正常。
编辑:每次创建可以return生成GKGridGraph的新class对象而不是重新分配同一个对象是不是个好主意?
好的,所以我找到了答案并想与大家分享!
删除节点后我这样做了(不需要像我那样添加节点):
for(GKGridGraphNode *node in walls)
{
[NewGraph connectNodeToAdjacentNodes:node];
}
NewGraph = nil;
祝你好运!
我正在尝试制作一款回合制游戏,每个敌人都应该找到通往玩家节点的路径。我正在使用 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];
如果我注释掉行 removeNodes 和 addNodes 一切正常。
编辑:每次创建可以return生成GKGridGraph的新class对象而不是重新分配同一个对象是不是个好主意?
好的,所以我找到了答案并想与大家分享! 删除节点后我这样做了(不需要像我那样添加节点):
for(GKGridGraphNode *node in walls)
{
[NewGraph connectNodeToAdjacentNodes:node];
}
NewGraph = nil;
祝你好运!