所以我开始学习SpriteKit,我和一个跳过积木的英雄做了一个简单的游戏, 我用SKAction moveByX移动英雄,一切正常。我希望动作的速度随着时间的推移而增加,所以我希望我的英雄随着时间的推移越来越快。我在图书馆看到了那些speedBy和speedTo动作,但我并不理解它们。 这是我的行动代码:
SKAction *moveRight = [SKAction moveByX:1.0 y:0 duration:0.004];
SKAction *foreverRight = [SKAction repeatActionForever:moveRight];
[self runAction:foreverRight];
答案 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
}
这将使角色的速度越来越快。