Как сделать дочерние узлы неэффективными для вращения родительских узлов?

Я пытаюсь добавить SKEmitterNode к шару SKSpriteNode в детстве. Но в то же время я rotating мой шаровой узел. Но проблема в том, что вращение шарового узла заставляет вращаться эмиттерный узел (поскольку эмиттерный узел является дочерним по отношению к шаровому узлу). Есть ли что-нибудь, что я мог бы сделать, чтобы не вращать узел эмиттера, а вращать узел шара?

Я добавил шаровой узел как:

SKSpriteNode * ball = [SKSpriteNode spriteNodeWithImageNamed:imageName];
ball.name=name;
ball.size=size;
ball.anchorPoint=CGPointMake(0, 0);

[self addChild:ball];

и я добавил узел эмиттера как:

 SKEmitterNode *burstEmitter =
 [NSKeyedUnarchiver unarchiveObjectWithFile:_emitterNodePath];
 [ball addChild:burstEmitter];

и когда мяч ударяется о стену, я вращаю мяч:

-(void)didBeginContact:(SKPhysicsContact *)contact
{

  SKSpriteNode * firstNode = (SKSpriteNode*)contact.bodyA.node;
  SKSpriteNode *  secondNode = (SKSpriteNode *)contact.bodyB.node;
  if (firstNode.physicsBody .categoryBitMask == wallHitCategory ||  secondNode.physicsBody.categoryBitMask == wallHitCategory) {

        NSLog(@"first sound and then rotate ball");
        [self runAction:[SKAction playSoundFileNamed:@"basketBall bounce.WAV" waitForCompletion:NO]];
        secondNode.anchorPoint=CGPointMake(0.5, 0.5);
            [secondNode runAction:[SKAction rotateByAngle:degToRad(180.0f) duration:3.0]];

    }
}

Можно ли повернуть родительский узел, но не его дочерний узел?


person Teja Nandamuri    schedule 14.12.2015    source источник
comment
Я не знаю, насколько это будет полезно, но вы можете повернуть дочерний узел в направлении, противоположном родительскому узлу, тогда, возможно, он будет достаточно гладким, чтобы глаз не видел изменений, что касается другого подхода, возможно, PinJoint может помочь -Надеюсь, это полезно   -  person ColdSteel    schedule 14.12.2015
comment
Спасибо за подсказку, я попробую и вернусь к вам.   -  person Teja Nandamuri    schedule 14.12.2015
comment
Есть ли какая-то причина, по которой вы не можете создать невидимый узел, дочерними элементами которого были бы узел шара и узел-эмиттер? Затем невидимый узел будет определять их положение, но шаровой узел будет вращаться независимо от излучателя.   -  person Sean G    schedule 14.12.2015
comment
нет, я так не думал. Это должен быть хороший хак, чтобы заставить его работать. я тоже так попробую!!! Спасибо @SeanG   -  person Teja Nandamuri    schedule 14.12.2015
comment
И user3351949, и SeanG дают отличный ответ и должны дать им ответы как таковые, чтобы получить надлежащие голоса и признание. В основном, как бы я это разработал, если только 1 дочерний элемент не слушает вращение родителя, используйте ответ пользователя 3351949, если несколько дочерних элементов не вращаются, используйте ответ SeanG, но вместо этого создайте родительский узел, 2 дочерних узла (один которые вращаются, а тот, который нет) и поместите все остальные узлы в соответствующие дочерние узлы родителя   -  person Knight0fDragon    schedule 14.12.2015
comment
ты имеешь в виду ответ SeanG @Knight0fDragon? Я ничего не ответил ;)   -  person Teja Nandamuri    schedule 14.12.2015
comment
да, извини, лол, ты постер   -  person Knight0fDragon    schedule 14.12.2015


Ответы (2)


Вы можете повернуть дочерний узел в направлении, противоположном родительскому узлу, тогда, возможно, он будет достаточно гладким, чтобы глаз не увидел изменений. Что касается другого подхода, возможно, может помочь pinJoint.

Также комментарий SeanG очень хорош! Я бы предпочел это решение, потому что оно кажется более производительным с точки зрения процессора!

Имея невидимый узел в качестве родительского узла как для шара, так и для узла эмиттера, тогда, когда вы будете вращать узел эмиттера шара, вращение не повлияет на него.

  • Надеюсь, это полезно
person ColdSteel    schedule 14.12.2015

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

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

person Sean G    schedule 14.12.2015