ios - 用它的 child 调整 SKSpriteNode 的大小

标签 ios objective-c sprite-kit skspritenode skaction

我正在尝试在有一个子节点的 SKSpriteNode 上运行一系列 SKActions, 所有 Action 都在 2 个形状上一起执行,除了:

[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];
}

最佳答案

要达到预期效果,您应该使用 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];
}
}

关于ios - 用它的 child 调整 SKSpriteNode 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20537875/

相关文章:

ios - 在安装 iOS 应用程序时提醒用户所需的 iOS 版本

ios - MKPointAnnotation 不再在 iOS 11 中显示标题

javascript - 外部 JS 是否可以在 iOS WkWebView 的加载页面(完成后)上执行

ios - 借助 iOS 中的 AudioQueueServices 示例将音频线性 pcm 转换为 mp3(使用 LAME)

ios - 如何使用 Xamarin 在 iOS 上设置 Material Components 选项卡栏的宽度

objective-c - UITableViewCell 中的 UITextField 不会成为第一响应者

swift - 是否可以在不是 SKAction 的 SKAction 序列中运行代码?

ios - Spritekit 物理和相机平滑

ios - SpriteKit 在碰撞时随机卡住

ios - 警告 ITMS-90788 : "Incomplete Document Type Configuration"