Имея немного проблем с кодом ниже. Массив точек - это набор точек, предоставляемых алгоритмом поиска пути, который дает кратчайший путь между начальными и конечными CGPoints, выполненными в нижеприведенном методе. Отлаживая этот код, я знаю, что он работает.CGPath проблема?
Я думаю, что его CGPath вызывает у меня проблемы, похоже, это не очистка? Всякий раз, когда я генерирую новый путь из алгоритма, игрок всегда возвращается к позиции, в которой он впервые заходил, и затем перемещается вдоль расстояния каждого пути, созданного до сих пор в приложении. Это происходит каждый раз, когда я пытаюсь создать новый путь.
Любые идеи?
-(void)doubleTap:(UITapGestureRecognizer *)touchPoint
{
CGPoint touchLocation = [touchPoint locationInView:touchPoint.view];
touchLocation = [self convertPointFromView:touchLocation];
//on double tap take the location of the player and the location tapped and pass it to the path finder.
CGPoint start = CGPointMake((int)(player.position.x/SPACING), (int)(player.position.y/SPACING));
CGPoint end = CGPointMake((int)(touchLocation.x/SPACING), (int)(touchLocation.y/SPACING));
NSMutableArray *points = [NSMutableArray arrayWithArray:[self reverseArray:[pathFinder findPath:start End:end]]];
//convert path to moveable path for sprite, move sprite along this path.
CGMutablePathRef path = CGPathCreateMutable();
if (points.count > 0)
{
PathFindingNode *firstNode = [points objectAtIndex:0];
CGPathMoveToPoint(path, NULL, firstNode.position.x, firstNode.position.y);
for (int i = 1; i < points.count; i++)
{
firstNode = [points objectAtIndex:i];
CGPathAddLineToPoint(path, NULL, firstNode.position.x, firstNode.position.y);
}
}
SKAction *hover = [SKAction followPath:path asOffset:NO orientToPath:YES duration:2.0];
[player runAction: [SKAction repeatAction:hover count:1]];
[points removeAllObjects];
CGPathRelease(path);
}
Существует утечка памяти где-то при переходе по пути к этому коду:
//convert path to moveable path for sprite, move sprite along this path.
CGMutablePathRef path = CGPathCreateMutable();
if (points.count > 0)
{
PathFindingNode *firstNode = [points objectAtIndex:0];
CGPathMoveToPoint(path, NULL, firstNode.position.x, firstNode.position.y);
for (int i = 1; i < points.count; i++)
{
firstNode = [points objectAtIndex:i];
CGPathAddLineToPoint(path, NULL, firstNode.position.x, firstNode.position.y);
}
}
SKAction *hover = [SKAction followPath:path asOffset:NO orientToPath:YES duration:2.0];
[player runAction: [SKAction repeatAction:hover count:1]];
[points removeAllObjects];
CGPathRelease(path);
}
Если я комментирую этот код из памяти, то остается около 50 МБ на IPad. Если он не закомментирован, он просто продолжает подниматься все выше и выше, пока он не упадет примерно на 1,5 ГБ.
Как проверить, добавляет ли он его? Я отредактировал свой вопрос с небольшой дополнительной информацией, которую я узнал после дальнейшей отладки. – dev6546
Не знаю. Я не знаю ничего о сцене, кроме резюме, которое я прочитал, и демонстрационное приложение, которое я создал и запускал. Надеюсь, кто-то еще с большим знанием SceneKit может взвесить. –
Это должно было быть связано с предыдущим пустым сгенерированным стартовым узлом следующего пути, все еще были родителями от созданного ранее пути, установив его родительский номер в нуль при поиске пути, исправленного ! – dev6546