我正在制作一个带有视差滚动地面的反应游戏。我的敌人产卵计时器位于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可以帮助我,但我不知道如何用它实现产卵方法。我在互联网上阅读了一些教程,但它并没有帮助我。有人能帮助我吗?答案 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
}
}
如果需要,您可以管理地面长度属性