Animation 在SpriteKit(SKCropNode)中设置遮罩图像的动画

Animation 在SpriteKit(SKCropNode)中设置遮罩图像的动画,animation,ios7,sprite-kit,skcropnode,Animation,Ios7,Sprite Kit,Skcropnode,我正在使用Sprite Kit创建我的第一个iOS应用程序,而我却在一个看似相当基本的问题上跌跌撞撞 我正在尝试为SKCropNode(cropNode)的内容(fillNode)设置动画。下面的代码将SKScene设置得很好(我看到插图被正确屏蔽,放置在背景图像的正确位置上) …但我无法访问遮罩插图来设置其位置的动画(我希望它从遮罩外部开始并滑入位置): 我只能为整个logoContent设置动画,而不能为其子节点设置动画 知道我哪里出错了吗?知道了 [self.logoContent.tar

我正在使用Sprite Kit创建我的第一个iOS应用程序,而我却在一个看似相当基本的问题上跌跌撞撞

我正在尝试为SKCropNode(
cropNode
)的内容(
fillNode
)设置动画。下面的代码将SKScene设置得很好(我看到插图被正确屏蔽,放置在背景图像的正确位置上)

…但我无法访问遮罩插图来设置其位置的动画(我希望它从遮罩外部开始并滑入位置):

我只能为整个
logoContent
设置动画,而不能为其子节点设置动画

知道我哪里出错了吗?

知道了

[self.logoContent.target_illustration runAction: moveSequence completion:^{
应该是

[self.logoContent.children[0] runAction: moveSequence completion:^{

我的插图现在按照指示移动:)

仅供参考,如果有人想知道如何屏蔽,这里有一个简单的片段

- (void) cropNodes
{
    // the parent node i will add to screen
    SKSpriteNode *picFrame = [SKSpriteNode spriteNodeWithColor:[SKColor greenColor] size:CGSizeMake(100, 100)];
    picFrame.position = CGPointMake(200, 200);

    // the part I want to run action on
    SKSpriteNode *pic = [SKSpriteNode spriteNodeWithImageNamed:@"Spaceship"];
    pic.name = @"PictureNode";

    SKSpriteNode *mask = [SKSpriteNode spriteNodeWithColor:[SKColor blackColor] size:CGSizeMake(80, 50)];

    SKCropNode *cropNode = [SKCropNode node];
    [cropNode addChild:pic];
    [cropNode setMaskNode:mask];
    [picFrame addChild:cropNode];
    [self addChild:picFrame];

    // run action in this scope
        //[pic runAction:[SKAction moveBy:CGVectorMake(30, 30) duration:10]];

    // outside scope - pass its parent
   [self moveTheThing:cropNode];
}

- (void) moveTheThing:(SKNode *) theParent
{
    // the child i want to move
    SKSpriteNode *moveThisThing = (SKSpriteNode *)[theParent   childNodeWithName:@"PictureNode"];
    [moveThisThing runAction:[SKAction moveBy:CGVectorMake(30, 30) duration:10]];
}

我遇到的问题是由于在didMoveToView方法中调用runAction,而logoContent节点(及其命名子节点)是在createSceneContents方法(从didMoveToView调用)中创建的;由于范围的原因,我无法访问命名的插图节点。在同一作用域中调用runAction时,您的解决方案工作正常。您不想使用childNodeWithName方法吗?我尝试过,但无法使其工作。怪我没有Obj-C经验!你所能做的就是尝试。。。可能只是一个SK错误,它不工作。我会添加一个答案,看看它是否有效是的,你的代码确实有效。。。我遇到的问题是,我的动画动作与节点的作用域不同(它们是在函数中创建的)。将节点创建移动到与动画调用相同的功能,调用
[self.logoContent.children[0]runAction:moveSequence completion:^{
。啊,谢谢!我犯了完全相同的错误。你刚刚让我省去了无数次的困惑。尽管是两年前。
[self.logoContent.children[0] runAction: moveSequence completion:^{
- (void) cropNodes
{
    // the parent node i will add to screen
    SKSpriteNode *picFrame = [SKSpriteNode spriteNodeWithColor:[SKColor greenColor] size:CGSizeMake(100, 100)];
    picFrame.position = CGPointMake(200, 200);

    // the part I want to run action on
    SKSpriteNode *pic = [SKSpriteNode spriteNodeWithImageNamed:@"Spaceship"];
    pic.name = @"PictureNode";

    SKSpriteNode *mask = [SKSpriteNode spriteNodeWithColor:[SKColor blackColor] size:CGSizeMake(80, 50)];

    SKCropNode *cropNode = [SKCropNode node];
    [cropNode addChild:pic];
    [cropNode setMaskNode:mask];
    [picFrame addChild:cropNode];
    [self addChild:picFrame];

    // run action in this scope
        //[pic runAction:[SKAction moveBy:CGVectorMake(30, 30) duration:10]];

    // outside scope - pass its parent
   [self moveTheThing:cropNode];
}

- (void) moveTheThing:(SKNode *) theParent
{
    // the child i want to move
    SKSpriteNode *moveThisThing = (SKSpriteNode *)[theParent   childNodeWithName:@"PictureNode"];
    [moveThisThing runAction:[SKAction moveBy:CGVectorMake(30, 30) duration:10]];
}