Ios 修改运行操作的速度
我有以下代码:Ios 修改运行操作的速度,ios,iphone,objective-c,sprite-kit,skaction,Ios,Iphone,Objective C,Sprite Kit,Skaction,我有以下代码: @implementation MyScene { SKAction *delayAction; } Inside a method: delayAction = [SKAction waitForDuration:3.0]; [self runAction:[SKAction repeatActionForever: [SKAction sequence: @[delayActi
@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。另外,这是一种本地语言,应该可以稍微快一点。虽然您无法自定义速度变化 这可以类似于这样做: yourSKAction.timingMode=SKActionTimingEaseOut;
很好的解决方案。无论如何,我用不同的方法解决了。我用actionForKey搜索了这个动作:然后我删除了它。在此之后,我以不同的等待时间再次启动它。