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

时间:2014-12-15 09:01:35

标签: objective-c sprite-kit children skaction

无论如何,我可以为子节点设置动画,而不依赖于它的父节点吗?

例如

//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]];

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

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

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

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

更新:

我发现如果我删除物理体(child.physicsBody = nil)我可以改变位置(child.position = newPosition)但我不能运行改变位置的动作([child runAction:[SKAction moveByX: 25 y:25持续时间:1.0f])。

谢谢!

1 个答案:

答案 0 :(得分:0)

解决方案:

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

例如:

[child runAction:[SKAction waitForDuration:0.0]];

[parent addChild:child];

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

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