计时器

时间:2016-01-25 22:25:09

标签: ios objective-c sprite-kit 2d 2d-games

我正在制作一个带有视差滚动地面的反应游戏。我的敌人产卵计时器位于didMoveToView中,现在出现了我的问题。游戏时游戏速度加快,但我的产卵方法保持不变,所以如果敌人以相同的频率产生,它会很无聊。 这是代码:

//inside the didMoveToView    
SKAction *addEnemRand = [SKAction performSelector:@selector(addRandomEnemy) onTarget:self];
SKAction *addEnemRandWait = [SKAction waitForDuration:2];
SKAction *addEnemRandAll = [SKAction sequence:@[addEnemRandWait, addEnemRand]];
SKAction *addEnemRandAllForever = [SKAction repeatActionForever:addEnemRandAll];
[self runAction:addEnemRandAllForever];

有人知道以正确的方式产生敌人的方法吗?

这是移动地面的代码(有两个)。也许它可以将产卵速度与地面位置联系起来?:

-(void)addGround:(SKSpriteNode *)sprite withSpeed:(int)speed {

if (ground.position.x+ground.frame.size.width/2 < 0) {

    ground.position = CGPointMake(self.size.width+ground.size.width/2, ground.size.height/2+1);
}

// movement
ground.position = CGPointMake(ground.position.x-speed, ground.position.y);    
}

感谢您的帮助! (请在目标c中填写代码)

编辑:所以似乎GamePlayKit可以帮助我,但我不知道如何用它实现产卵方法。我在互联网上阅读了一些教程,但它并没有帮助我。有人能帮助我吗?

2 个答案:

答案 0 :(得分:0)

我认为值得研究randomizing that GamePlayKit provides来做到这一点。

看看这个tutorial你实施“基本规则系统与另一个随机分布相结合来处理敌人的重生行为”

答案 1 :(得分:0)

您可以使用地面位置或使用时间来管理生成时间,因为已经开始了关卡。这是我用于模拟任务的更新方法中的代码,使用时间过去。

initWithSize方法中的

属性:

self.lastUpdateTimeInterval = 0;
self.timeSinceEnemyAdded = 0;
self.addEnemyTimeInterval = 1.5;
self.totalGameTime = 0;

更新方法:

   -(void)update:(NSTimeInterval)currentTime {

        if (self.lastUpdateTimeInterval ) {
            self.timeSinceEnemyAdded += currentTime - self.lastUpdateTimeInterval;
            self.totalGameTime += currentTime - self.lastUpdateTimeInterval;     
        }

        if (self.timeSinceEnemyAdded > self.addEnemyTimeInterval && !self.gameOver) {
            [self addEnemy];
            self.timeSinceEnemyAdded = 0;
        }

        self.lastUpdateTimeInterval = currentTime;

        if (self.totalGameTime > 480) {
            self.addEnemyTimeInterval = 0.5;
            self.minSpeed = -160;
        } else if (self.totalGameTime > 240) {

            self.addEnemyTimeInterval = 0.65;
            self.minSpeed = -150;  
        } else {

        //Something else

        }
}

如果需要,您可以管理地面长度属性