繁体   English   中英

修改运行中的SKAction的速度

[英]Modify the speed of a running SKAction

我有以下代码:

@implementation MyScene {
SKAction *delayAction; 
}
Inside a method:

delayAction = [SKAction waitForDuration:3.0];
[self runAction:[SKAction repeatActionForever: [SKAction sequence:
                                                @[delayAction, [SKAction ...]]]]]
                                                  withKey:@"myKey"];

然后,我想减少加班时间。 (此方法在更新时被调用:)所以我尝试了:

    - (void)updateVelocity
{
    NSLog(@"duration:%f",delayAction.duration);
    delayAction.duration = delayAction.duration - 0.001;
}

我得到:

2014-04-04 11:45:05.781 FlyFish[5409:60b] duration:1.300000
2014-04-04 11:45:05.785 FlyFish[5409:60b] duration:1.299000
2014-04-04 11:45:05.800 FlyFish[5409:60b] duration:1.298000
2014-04-04 11:45:05.816 FlyFish[5409:60b] duration:1.297000

看起来不错,但是我的[SKAction ...]在3秒后仍然继续重复。

我会以其他方式进行。 像这样

- (void)recursiveActionMethod
{
    if (some end condition is met) {
        return;
        // this allows you to stop the repeating action.
    }

    self.duration -= 0.01;
    // store duration in a property

    SKAction *waitAction = [SKAction waitForDuration:self.duration];
    SKAction *theAction = [SKAction doWhatYouWantHere];
    SKAction *recursiveAcion = [SKAction performSelector:@selector(recursiveActionMethod) onTarget:self];

    SKAction *sequence = [SKAction sequence:@[waitAction, theAction, recursiveAction]];
    [self runAction:sequence];
}

这将执行您的操作,然后返回此功能,以不同的等待时间一次又一次地再次运行,...

您甚至可以通过使某些结束条件跳到if块中并停止循环来停止序列。

我有点迟了,但是您可以将操作设置为SKActionTimingEaseOut。 同样,这是语言本机,应该会稍快一些。 (尽管您不能自定义速度更改),可以执行以下操作:

  1. yourSKAction.timingMode = SKActionTimingEaseOut;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM