2013-10-08 33 views
2

我使用Sprite Kit來創建我的第一個iOS應用程序,並且我正在絆倒似乎是一個非常基本的問題。SpriteKit(SKCropNode)中的動畫遮罩的圖像

我正在試圖爲SKCropNode(cropNode)的內容(fillNode)設置動畫。下面的代碼設置了SKScene就好了(我看到正確掩蓋了說明,在正確的位置放置在背景圖片)...

SKSpriteNode *logoBG = [[SKSpriteNode alloc] initWithImageNamed:logoBackground]; 
logoBG.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame)); 
[self addChild:logoBG]; 

SKCropNode *cropNode = [[SKCropNode alloc] init]; 
cropNode.maskNode = [[SKSpriteNode alloc] initWithImageNamed:logoMask]; 
SKSpriteNode *fillNode = [[SKSpriteNode alloc] initWithImageNamed:logoImage]; 

[cropNode addChild:fillNode]; 
fillNode.position = CGPointMake(0,300); 
cropNode.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame)); 
self.logoContent = cropNode; 
[self addChild:self.logoContent]; 

...但我不能訪問被屏蔽的圖示來動畫的位置(我希望它開始摘下面具外面滑入到位):

CGRect screenBound = [[UIScreen mainScreen] bounds]; 
CGSize screenSize = screenBound.size; 

SKAction *moveUp = [SKAction moveByX: 0 y: 100 duration: 5]; 
SKAction *moveSequence = [SKAction sequence:@[moveUp]]; 
[self.logoContent.target_illustration runAction: moveSequence completion:^{ // '.target_illustration' = the SKSpriteNode that I want to animate; cropNode.fillNode 
    SKScene *titleScreen = [[TitleScreen alloc] initWithSize:self.size]; 
    SKTransition *fade = [SKTransition fadeWithDuration:(1)]; 
    [self.view presentScene:titleScreen transition:fade]; 
}]; 

我只能動畫整個logoContent,而不是它的子節點。

任何想法我錯了嗎?

回答

5

僅供參考,如果有人想知道如何掩蓋,這裏是一個簡單的片斷

- (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]]; 
} 
+0

我遇到的問題是由於在didMoveToView方法中調用了runAction,而在createSceneContents方法中創建了logoContent節點(及其命名的子節點)(由didMoveToView調用);由於範圍,我無法訪問指定的插圖節點。在相同範圍內調用runAction時,您的解決方案可以正常工作。 – MassivePenguin

+0

你不想使用childNodeWithName方法? – DogCoffee

+0

我試過了,無法讓它工作。指責我缺乏Obj-C的經驗! – MassivePenguin

2

Got it!

[self.logoContent.target_illustration runAction: moveSequence completion:^{ 

應該

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

我說明現在移動的指示:)

+0

啊,謝謝!我犯了完全一樣的錯誤。你剛剛救了我很多困惑。儘管2年前。 – Smikey