как Xcode автоматически удаляет skspritenode из родительского узла

Я новичок в разработке objectif-c и sprite-kit (но не в программировании). Итак, я начинаю Apple Spri. Приложение работает отлично, за исключением того, что узлы, представляющие камни, автоматически удаляются из своего родителя, когда камни падают на дно сцены. Это без реализации метода -(void)didSimulatedPhysics:

- (void)didSimulatedPhysics
{
  [self enumerateChildNodesWithName:@"rock" usingBlock:^(SKNode *node, BOOL *stop) {
    if (node.position.y < 0)
      [node removeFromParent];
  }];
}

Я вижу это со счетчиком узлов, показанным на экране: он не увеличивается с количеством камней. Итак, мой вопрос: Xcode управляет методом removeFromParent для моей программы? если да, не могли бы вы сказать мне возможность отключить. Я пытаюсь настроить ARC на NO, но это ничего не меняет.

Я надеюсь, что мое сообщение понятно. Если нет, пожалуйста, скажите мне. Заранее спасибо за ваш ответ.

Рафаэль


person Oby1    schedule 02.04.2014    source источник
comment
Количество узлов — это показатель узлов, которые в настоящее время находятся в видимой области, т. е. которые должны были быть отрисованы набором спрайтов для этого кадра.   -  person ZeMoon    schedule 02.04.2014


Ответы (2)


Я вижу это со счетчиком узлов, показанным на экране: он не увеличивается с количеством камней.

Это связано с тем, что Sprite Kit по умолчанию считает только «рендеринговые» узлы (то есть узлы на экране). Чтобы увидеть отбракованные узлы, вы должны включить дополнительный недокументированный флаг отладки:

[self.scene.view setValue:@(YES) forKey:@"_showsCulledNodesInNodeCount"];

В качестве альтернативы, чтобы получить истинное количество узлов узла, такого как сцена, добавьте это туда, где вы хотите зарегистрировать количество узлов:

NSLog(@"node count: %u", (unsigned int)self.children.count);

Другими словами: если вы не удалите узел из его родителя, Sprite Kit не сделает это автоматически ни при каких обстоятельствах. Однако он очистит граф узлов старой сцены при представлении новой сцены, при условии, что нет никаких циклов сохранения (обычно встречается при наличии строгой ссылки на родительский или одноуровневый узел в пользовательском подклассе SKNode).

person LearnCocos2D    schedule 02.04.2014
comment
Есть ли способ увидеть общее количество узлов (включая узлы с alpha = 0)? - person fpg1503; 07.04.2015

Прежде чем вы закажете SKView для представления сцены, вы должны вызвать эти строки:

SKView * skView = (SKView *)self.view;
skView.showsFPS = YES;
skView.showsNodeCount = YES; // This is what shows the node count.

В документации Apple свойство showsNodeCount описывается как:

Логическое значение, указывающее, отображает ли представление количество видимых узлов в сцене.

Следовательно, Sprite Kit не удаляет их из родителя. Если бы эти узлы вернулись в границы представления, они, в свою очередь, увеличили бы это количество узлов.

person ZeMoon    schedule 02.04.2014