Я пытаюсь добавить эффект частицы в метод touchhesBegan, поэтому, когда пользователь коснется рисованного спрайта (SKSpriteNode), он рисует эффект частицы. Однако, я получаю сообщение об ошибке Попытка добавить SKNode, у которого уже есть родитель: SKEmitterNode. Чтобы добавить какой-то контекст ... Игра имеет стиль bejeweled/candy crush, где блоки (deleteNode) удаляются на основе соседних цветов. В событии касания я повторяю рекурсивно, проверяя соседние блоки и добавляю их в массив, чтобы впоследствии удалить. Перед удалением каждого блока (deleteNode) я хотел бы, чтобы событие частицы произошло. Они оба наследуют от SKNode (правильно?), Так что я не понимаю, конфликт ...Xcode 5.0.2 - Попытка добавить SKNode, у которого уже есть родительский объект: <SKEmitterNode>
@interface
{
NSString *blockParticlePath;
SKEmitterNode *blockParticle;
}
в методе инициализации ...
blockParticlePath = [[NSBundle mainBundle] pathForResource:@"blockParticle" ofType:@"sks";
blockParticle = [NSKeyedUnarchiver unarchiveObjectWithFile:blockParticlePath];
в touchesBegan ...
blockParticle.position = deleteNode.position;
blockParticle.particleColor = deleteNode.color;
[self addChild:blockParticle];
Чтобы убедиться, что я не сумасшедший, я проверил другие форумы и увидел эту же логику для добавления эффектов частиц к сцене. Заранее спасибо. Если вам нужна дополнительная информация, дайте мне знать.
Если вы просто добавляете свою частицу к себе (I.e. SKScene), вы должны быть в порядке, убедитесь, что у частицы нет родителя. Попробуйте создать новый проект, создайте частицу, а затем добавьте ее в SKScene, если это работает, у вас, вероятно, есть что-то, что вам не хватает. – fuzzygoat
@fuzzygoat: Я выполнил этот тест. В проекте по умолчанию SpriteKit я добавил свои 6 строк кода, минус переменную deleteNode. Вместо этого используйте CGMakePoint для позиции и SKColor для цвета, и он отлично работает. Следующим шагом будет присвоение аналогичных значений в исходном проекте. Может ли компилятор путать узел emmitter с узлом спрайта просто потому, что я назначаю значения, связанные с узлом спрайта? После дальнейшего тестирования я еще раз прокомментирую. Благодарю. – whfissler
Итак, я попытался установить позицию как новый CGPoint: blockParticle.position = CGMakePoint (deleteNode.position.x, deleteNode.position.y); которые я, вероятно, должен был иметь в любом случае. Но, все та же ошибка. Затем я удалил всю свою логику частиц из события касания и добавил частицу к сцене из метода инициализации, она работает. Это не динамично для моих блоков, но оно нарисовано на сцене ... – whfissler