ios - 发射器不随父节点旋转

标签 ios objective-c sprite-kit skemitternode

代码 --> http://pastebin.com/W3DMYjXa

我正在修补 SpriteKit,我似乎无法让发射器节点按照我想要的方式随我的宇宙飞船旋转。

我观看了 Apple Tech Talks Session,他们在其中描述了制造宇宙飞船并使用发射器进行推力排气,但他们将飞船锁定为仅面向一个方向。

在我的实验中,我试图让玩家 Sprite (宇宙飞船)向任何方向移动,我为玩家提供了旋转和滚动功能,但粒子发射器似乎并不随玩家旋转。

我的层次结构看起来像这样

场景

-->世界节点

-->玩家节点

---->玩家 Sprite

---->发射器节点

我的理论是,如果我旋转(玩家节点),它应该旋转它的两个子节点,它确实旋转了它们,但发射器继续沿同一方向发射。

我可以手动改变发射角度,但这似乎不必要地复杂。

这是我用来旋转的东西

-(void)rotatePlayerToDirection:(TTDirection)direction {

    CGFloat radDir;
    CGFloat emiDir;
    scrollDirection = direction;

    switch (direction) {
        case TTUp:
            radDir = 0;
            emiDir = 3.142;
            break;
        case TTRight:
            radDir = 4.712;
            emiDir = 1.571;
            break;
        case TTDown:
            radDir = 3.142;
            emiDir = 0;
            break;
        case TTLeft:
            radDir = 1.571;
            emiDir = 4.712;
            break;

        default:
            break;
    }



    SKAction *rotatePlayer = [SKAction rotateToAngle:radDir duration:0.1 shortestUnitArc:YES];

    [playerNode runAction:rotatePlayer];

}

我是不是漏掉了什么?

这是一个实际操作的视频

http://youtu.be/NGZdlB9-X_o

最佳答案

我相当确定 spritekit 中存在与 targetNode 和旋转有关的错误。另一个答案似乎表明这是预期的行为,但忽略了文档明确将这种情况作为 targetNode 存在的动机。

Working with Other Node Types

What you really want is for the particles to be spawned, but thereafter be independent of the emitter node. When the emitter node is rotated, new particles get the new orientation, and old particles maintain their old orientation.

然后它给出了一个使用 targetEmitter 的例子来说明如何实现这一点。但是,示例代码不起作用。

似乎设置 targetNode 会破坏粒子旋转。

更新:我找到了解决方法。

设置 SKEmitterNode.targetNode 后,Spritekit 无法调整 SKEmitterNode.emissionAngle 属性。您可以通过在处理完操作后手动设置它来解决此问题。

假设你的 SKEmitterNode 只有一个父节点,你可以在你的场景中做这样的事情。

- (void)didEvaluateActions
{
    // A spaceship with a thrust emitter as child node.
    SKEmitterNode *thrust = (SKEmitterNode *)[self.spaceship childNodeWithName:@"thrust"];
    thrust.emissionAngle = self.spaceship.zRotation + STARTING_ANGLE;
}

请注意,如果有多个可能旋转的祖先节点,您将需要遍历它们并将它们的所有 zRotations 加在一起。

关于ios - 发射器不随父节点旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22042895/

相关文章:

iphone - 是否可以使 OpenGL ES 层透明?

javascript - iOS 上 jquery ui datepicker 奇怪的触摸/点击行为

ios - 如何在 iOS swift 4 中进行名字验证?

iphone - 如果应用程序意外关闭,如何重新启动应用程序

c++ - Xcode 调试器 : What does the blue italic text mean?

ios - 从 block 更新 uilabel

ios - 不知道如何将触摸作为单个实体处理

ios - 如何在 iOS 中创建带有渐变的叠加颜色

ios - Sprite 节点随机渲染......需要帮助

objective-c - SKAudioNode的音量