конечно, вы не можете добавить ParticleBatchNode к спрайту (так же, как вы не можете добавить частицу, если спрайт использовался в SpriteBatchNode)
для решения аналогичных проблем, которые я использую, чтобы наследовать класс от ccsprite, скажем, MySprite, а затем переопределить установщик положения
-(void) setPosition:(CGPoint) position {
myParticleEmitter.position = position; //+ offsets if needed
[super setPosition:position];
}
Вам нужен указатель на излучатель, я обычно сохраняю слабую ссылку на излучатель из MySprite, и автоматически каждый раз, когда я устанавливаю и изменяю положение, за которым следует излучатель.
Я не совсем понял вторую часть вашего вопроса, но я думаю, что вы можете просто обновить направление гравитации излучателя, когда ваши спрайты перемещаются / вращаются, переопределяя также setRotation, если необходимо