2013-12-12 2 views
3

Я пытаюсь запустить последовательность SKActions на SKSpriteNode, который имеет один ребенок, все действия выполняются на 2 формы вместе, кроме:Resizing SKSpriteNode с ним дети

[SKAction resizeToWidth:<#(CGFloat)#> height:<#(CGFloat)#> duration:<#(NSTimeInterval)#>] 

Вот мой код:

-(void)CreateCards{ 
for (int i=0; i<3; i++) { 
    SKSpriteNode *sprite=[SKSpriteNode spriteNodeWithImageNamed:@"default_circle.png"]; 
    SKSpriteNode *shape=[SKSpriteNode spriteNodeWithImageNamed:[self GetRandomImage]]; 
    [sprite addChild:shape]; 
    sprite.position=CGPointMake(-43, 345); 
    sprite.size=CGSizeMake(43, 43); 
    shape.size=CGSizeMake(43, 43); 


    SKAction *zoom=[SKAction group:[NSArray arrayWithObjects:[SKAction moveTo:CGPointMake(60, 345) duration:0.75],[SKAction resizeToWidth:80 height:80 duration:0.75], nil]]; 
    zoom.timingMode=SKActionTimingEaseOut; 

    SKAction *zoomOut=[SKAction group:[NSArray arrayWithObjects:[SKAction moveTo:[self GetLocationOfIndex:i NumberOfCircles:3] duration:0.5],[SKAction resizeToWidth:43 height:43 duration:0.5], nil]]; 

    zoomOut.timingMode=SKActionTimingEaseIn; 


    SKAction *enter=[SKAction sequence:[NSArray arrayWithObjects:[SKAction waitForDuration:1*i],zoom,zoomOut, nil]]; 
    [sprite runAction:enter]; 


    [self addChild:sprite]; 
} 

}

ответ

9

Для достижения желаемого эффекта вы должны использовать scaling вместо изменения размера.

Заменить:

SKAction *zoom=[SKAction group:[NSArray arrayWithObjects:[SKAction moveTo:CGPointMake(60, 345) duration:0.75],[SKAction resizeToWidth:80 height:80 duration:0.75], nil]]; 

С:

SKAction *zoom=[SKAction group:[NSArray arrayWithObjects:[SKAction moveTo:CGPointMake(60, 345) duration:0.75],[SKAction scaleXBy:80/43 y:80/43 duration:0.75], nil]]; 

Следующий код работает для Вашего случая:

-(void)CreateCards{ 
for (int i=0; i<3; i++) { 
    SKSpriteNode *sprite=[SKSpriteNode spriteNodeWithImageNamed:@"default_circle.png"]; 
    SKSpriteNode *shape=[SKSpriteNode spriteNodeWithImageNamed:[self GetRandomImage]]; 
    [sprite addChild:shape]; 
    sprite.position=CGPointMake(-43, 345); 
    sprite.size=CGSizeMake(43, 43); 
    shape.size=CGSizeMake(43, 43); 

    CGFloat zoomScale = 80/43; 
    SKAction *zoom=[SKAction group:[NSArray arrayWithObjects:[SKAction moveTo:CGPointMake(60, 345) duration:0.75],[SKAction scaleXBy:zoomScale y:zoomScale duration:0.75], nil]]; 
    zoom.timingMode=SKActionTimingEaseOut; 

    SKAction *zoomOut=[SKAction group:[NSArray arrayWithObjects:[SKAction moveTo:[self GetLocationOfIndex:i NumberOfCircles:3] duration:0.5],[SKAction scaleXBy:1.0f y:1.0f duration:0.5], nil]]; 

    zoomOut.timingMode=SKActionTimingEaseIn; 


    SKAction *enter=[SKAction sequence:[NSArray arrayWithObjects:[SKAction waitForDuration:1*i],zoom,zoomOut, nil]]; 
    [sprite runAction:enter]; 


    [self addChild:sprite]; 
} 
} 
+0

Спасибо за помощь :) –

+2

Нет проблем :). Кроме синтаксического сахара, вы можете использовать @ [...] вместо [NSArray arrayWithObjects: ..., nil]. ;) –