随着时间的推移加快行动

时间:2014-08-21 11:19:24

标签: objective-c sprite-kit

所以我开始学习SpriteKit,我和一个跳过积木的英雄做了一个简单的游戏, 我用SKAction moveByX移动英雄,一切正常。我希望动作的速度随着时间的推移而增加,所以我希望我的英雄随着时间的推移越来越快。我在图书馆看到了那些speedBy和speedTo动作,但我并不理解它们。 这是我的行动代码:

SKAction *moveRight = [SKAction moveByX:1.0 y:0 duration:0.004];
SKAction *foreverRight = [SKAction repeatActionForever:moveRight];
[self runAction:foreverRight];

3 个答案:

答案 0 :(得分:1)

正如Seega所指出的,减少持续时间将使SKAction运动更快地执行。

但是在您的情况下,您的持续时间已经是0.004秒。降低此值甚至可能不会导致明显的变化。相反,您应该将moveByX值从1.0更改为更高的值,如1.5或2.0

答案 1 :(得分:1)

您也可以使用velocity属性而不是使用SKAction。 首先,你必须创建一个物理体,然后指定一个速度。

    self.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:1];
    self.physicsBody.velocity=CGVectorMake(speed,0);
    self.physicsBody.linearDamping=0; //avoid air resistance
    self.physicsBody.affectedByGravity=NO; //avoid gravity

你也可以使用SKActions来调节速度,就像这样

    SKAction* wait = [SKAction waitForDuration:1];
    SKAction* speedUp = [SKAction runBlock:^(void){
        speed+=5; //5 for example, play with numbers to see the acceleration
    }]; 
    SKAction* waitAndSpeedUp = [SKAction sequence:@[wait,speedUp]];

    SKAction* forever = [SKAction repeatActionForever:waitAndSpeedUp];

    [self runAction:forever];

在这种情况下,你等待1秒钟,并将速度永远提高5

答案 2 :(得分:0)

使用持续时间为0.004的操作很愚蠢,因为在iOS设备上的SpriteKit游戏中没有这样的持续时间。您将获得的最快动作超过0.016秒。 (即1/60秒)。

更好的方法是更改​​持续时间而不是距离,并在更新方法中以0的持续时间进行更改。像这样......

- (void)update:(NSTimeInterval)currentTime
{
    // other stuff

        CGFloat pixelsPerSecond = 100 + 10 * self.gameDuration; //some function of time that means speed increases over time as the game plays.

        CGFloat pixelsMoved = pixelsPerSecond * deltaTime; //delta time is the time change between update calls.

        [self runAction:[SKAction moveByX:pixelsMoved y:0 duration:0]];

    // other stuff
}

这将使角色的速度越来越快。