2014-01-19 3 views
1

В настоящее время я делаю игру в комплекте спрайтов, и у меня есть 8 методов, я написал весь временной код ETC, чтобы он вызывал метод каждые 1 секунду, но я хочу, чтобы он вызывал случайный из восьми методов, я пытался получить эту работу в течение нескольких недель, любая помощь будет muchly оценена, вот мой тайминг код -Sprite Kit Вызов случайного метода

- (void)updateWithTimeSinceLastUpdate:(CFTimeInterval)timeSinceLast { 

    self.lastSpawnTimeInterval += timeSinceLast; 
    if (self.lastSpawnTimeInterval > 5) { 
     self.lastSpawnTimeInterval = 0; 
     [self shoot1]; 
    } 
} 
- (void)update:(NSTimeInterval)currentTime { 
    // Handle time delta. 
    // If we drop below 60fps, we still want everything to move the same distance. 
    CFTimeInterval timeSinceLast = currentTime - self.lastUpdateTimeInterval; 
    self.lastUpdateTimeInterval = currentTime; 
    if (timeSinceLast > 1) { // more than a second since last update 
     timeSinceLast = 1.0/60.0; 
     self.lastUpdateTimeInterval = currentTime; 
    } 

    [self updateWithTimeSinceLastUpdate:timeSinceLast]; 

} 

Как вы можете видеть, вместо [self shoot1] я хочу, чтобы случайно вызвать один из восьми методов. Также все методы называются Shoot1, Shoot2, вплоть до Shoot8. Thankyou

+1

Возможный дубликат [Sprite kit, как я могу случайно вызвать метод?] (Http://stackoverflow.com/questions/20716328/sprite-kit-how-can-i-randomly-call-a-method) –

+0

Да, я не могу удалить, потому что у него есть ответы – user3110546

ответ

2

Я могу думать о двух вариантах ...

Вариант 1

Просто выбрать случайное число между 1 и 8, а также использовать switch заявление:

- (void)updateWithTimeSinceLastUpdate:(CFTimeInterval)timeSinceLast { 
    self.lastSpawnTimeInterval += timeSinceLast; 
    if (self.lastSpawnTimeInterval > 5) { 
     self.lastSpawnTimeInterval = 0; 

     int randomNumber = arc4random_uniform(8); 
     switch(randomNumber) { 
      case 0: 
       [self shoot1]; 
       break; 
      case 1: 
       [self shoot2]; 
       break; 
      // ... cases 2-6 
      case 7: 
       [self shoot8]; 
       break; 
     } 
    } 
} 

Вариант 2

Перепишите shootN методы, так что у вас есть только один метод, который принимает целое число в качестве параметра:

- (void)shoot:(int)index; 

Затем, вы можете просто сделать следующее:

[self shoot:arc4random_uniform(8)]; 
1

Вы также можете жить опасно ...

int random = arc4random() % 8; 
NSString *selectorName = [NSString stringWithFormat:@"shoot%i", random]; 
SEL selector = NSSelectorFromString(selectorName); 
if ([self respondsToSelector:selector]) { 
    [self performSelector:selector]; 
} 

Это, кстати, генерирует предупреждение при использовании ARC.

Смежные вопросы