Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 计时器的替代生成方法_Ios_Objective C_Sprite Kit_2d_2d Games - Fatal编程技术网

Ios 计时器的替代生成方法

Ios 计时器的替代生成方法,ios,objective-c,sprite-kit,2d,2d-games,Ios,Objective C,Sprite Kit,2d,2d Games,我正在做一个视差滚动地面的反应游戏。我的敌人产卵计时器位于didMoveToView中,现在是我的问题。游戏在玩的时候会加速,但是我的繁殖方法保持不变,所以如果敌人以同样的频率繁殖,那就有点无聊了。 代码如下: //inside the didMoveToView SKAction *addEnemRand = [SKAction performSelector:@selector(addRandomEnemy) onTarget:self]; SKAction *addEnemRand

我正在做一个视差滚动地面的反应游戏。我的敌人产卵计时器位于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);    
}
-(void)addGround:(SKSpriteNode*)带速度的精灵:(int)速度{
if(接地位置x+接地框架尺寸宽度/2<0){
ground.position=CGPointMake(self.size.width+ground.size.width/2,ground.size.height/2+1);
}
//运动
ground.position=CGPointMake(ground.position.x-速度,ground.position.y);
}
谢谢你的帮助!(请填写目标c中的代码)


编辑:看来GamePlayKit可以帮助我,但我不知道如何用它实现繁殖方法。我在网上读了一些教程,但对我没有帮助。有人能帮帮我吗?

我认为做这件事的方法值得研究


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

你可以使用地面位置来管理繁殖时间,或者使用时间,因为等级已经开始。这是我在simular任务更新方法中的代码,使用经过的时间

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

        }
}

如果需要,您可以只管理groundlenght属性

我正在寻找一种没有时间的繁殖方法。你能给我一个使用地面位置的产卵方法的例子吗?在你的addGround方法中,将“地面”存储在私有属性“self.ground.position=CGPointMake…”中,并在更新方法中使用该属性,在更新方法中,输入时间,检查“if(self.ground.position>someNumber),然后{self.speed=some speed}”(您还需要使速度可变-私有属性,以进行更改)我可以说如果(self.ground.position>someNumber)然后产卵敌人?它可以工作,但它不会停止产卵,那么,我如何调节产卵?我的意思是,它如何只能产卵一次,然后再等待?然后尝试使用代码,这是我之前发布的,你只需要2个first if语句,在那里你计算时间,因为最后一个敌人被添加。这绝对是一个好的阅读,但没有帮助例如,关于产卵与地面运动相关的问题。