2016-01-25 2 views
0

Je suis en train de faire un jeu de réaction avec un défilement de parallaxe. Mon timer de spawning ennemi se trouve dans le didMoveToView et vient maintenant mon problème. Le jeu accélère en jouant, mais ma méthode de reproduction reste la même, donc c'est ennuyeux si les ennemis sont engendrés avec la même fréquence. Voici le code:Méthode de frai alternative à une minuterie

//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]; 

Quelqu'un connait un moyen de frayer les enemys de manière appropriée?

Voici le code pour déplacer le sol (il y en a deux). Peut-être il est possible de relier la vitesse de reproduction avec la position du sol:

-(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);  
} 

Merci pour l'aide! (code dans l'objectif c s'il vous plaît)

EDIT: Donc, il semble que GamePlayKit peut m'aider mais je n'ai aucune idée de la façon d'implémenter la méthode de frai avec. J'ai lu quelques tutoriels sur internet mais cela ne m'a pas aidé. Est-ce que quelqu'un peut m'aider ?

Répondre

0

Je pense que cela vaut la peine de regarder dans le randomizing that GamePlayKit provides pour ce faire.

Jetez un oeil à ce tutorial où vous mettre en œuvre un « système de règles de base en combinaison avec une autre distribution aléatoire pour gérer le comportement de relancement des ennemis »

+0

Ce fut certainement une bonne lecture, mais didn Ne m'aidez pas en ce qui concerne ma question concernant le mouvement de frai au sol par exemple. – ccdev

0

Vous pouvez gérer le temps de spawn en utilisant la position du sol, ou à l'aide le temps, depuis que le niveau a été démarré. C'est mon code dans la méthode de mise à jour pour une tâche simulaire, en utilisant le temps passé.

propriétés dans la méthode initWithSize:

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

méthode de mise à jour:

-(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 

     } 
} 

Vous pouvez simplement gérer le sol propriété longueur, si vous voulez

+0

Je cherchais une méthode de frai sans temps. Pouvez-vous me donner un exemple pour une méthode de ponte utilisant la position au sol? – ccdev

+0

Dans votre méthode addGround, stockez le "sol" dans la propriété privée "self.ground.position = CGPointMake ..." et utilisez cette propriété dans la méthode de mise à jour, à la place de time, vérifiez "if (self.ground.position> someNumber) then {self.speed = un peu de vitesse} "(Vous devez également faire en sorte que la variable de vitesse - propriété privée, la change) –

+0

Puis-je dire si (self.ground.position> someNumber) alors engendrer l'ennemi? – ccdev