首页 文章

Objective C Sprite Kit - 无法独立于父节点为子节点设置动画

提问于
浏览
0

无论如何,我可以独立于其父节点为子节点设置动画吗?

例如

//create parent node
SKNode* parent = [SKSpriteNode spriteNodeWithColor:[UIColor whiteColor] size:CGSizeMake(100,100)];
[myScene addChild:parent];

//create child node (add to parent)
SKNode* child = [SKSpriteNode spriteNodeWithColor:[UIColor whiteColor] size:CGSizeMake(50,50)];
child.position = CGPointMake(0,0);
[parent addChild:child];

//attempt to run action on child
[child runAction:[SKAction moveByX:25 y:25 duration:1.0f]];

什么都没发生。但是,如果我在父级上运行相同的操作,它将按预期工作。

如何在独立于父节点的子节点上运行操作?这必须是可能的(e.g. 翅膀拍打鸟,轮胎打开汽车,起落架部署在飞机上,etc.)。

如果这是 sprite kit 的限制,你能推荐一个没有这些限制的游戏引擎框架吗?

我能够重新定位节点的唯一方法是将其直接添加到场景中。子节点无法重新定位。这是该框架中的一个巨大限制。非常令人失望。

更新:

我发现如果我删除物理体(child.physicsBody = nil)我可以改变位置(child.position = newPosition)但我不能运行改变位置的动作([child runAction:[3])。

谢谢!!

1 回答

  • 0

    解:

    如果我在将其添加到父节点之前对子节点运行任何操作,我随后可以运行更改子节点位置的操作。

    例如:

    [child runAction:[SKAction waitForDuration:0.0]];
    
    [parent addChild:child];
    
    //some time later...
    [child runAction:[SKAction moveByX:25 y:25 duration:1.0f]];
    

    我不知道为什么会这样,但确实如此。如果我没有在子节点上运行操作,然后将其添加到父后续操作,尝试移动节点不起作用。

相关问题