首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SpriteKit中的动画蒙面图像(SKCropNode)

SpriteKit中的动画蒙面图像(SKCropNode)
EN

Stack Overflow用户
提问于 2013-10-08 20:39:04
回答 2查看 5.4K关注 0票数 2

我正在使用雪碧套件来创建我的第一个iOS应用程序,并且我在似乎是一个相当基本的问题上绊倒了。

我试图动画的内容(fillNode)的SKCropNode (cropNode)。下面的代码很好地设置了SKScene (我看到了正确的蒙面插图,放置在正确位置的背景图像上).

代码语言:javascript
复制
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];

...but我无法访问蒙面插图来动画它的位置(我希望它从面具开始并滑到位置):

代码语言:javascript
复制
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,而不是它的子节点。

知道我哪里出问题了吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-08 21:37:03

如果有人想知道如何伪装,请参考,下面是一个简单的片段

代码语言:javascript
复制
- (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]];
}
票数 5
EN

Stack Overflow用户

发布于 2013-10-08 21:16:39

明白了!

代码语言:javascript
复制
[self.logoContent.target_illustration runAction: moveSequence completion:^{

应该是

代码语言:javascript
复制
[self.logoContent.children[0] runAction: moveSequence completion:^{

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19257923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档